2021-08-16面向对象进阶
Posted 二十的十七
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-08-16面向对象进阶相关的知识,希望对你有一定的参考价值。
第二章:面向对象进阶知识梳理
本章的内容概括:类的成员、THIS关键字、封装、静态成员。
内容一:类的成员变量和类变量区别
- 类的成员分为属性和方法,属性就是类的成员变量,也称为全局变量。类的方法里声明的变量称为局部变量。
2.成员变量分为:实例属性(无static修饰)、类属性(有static修饰)。
下面我们一起通过案例来看看类中的实例属性和类属性:
package com.test1;
public class Hero
String name;//实例变量(每个对象都会拥有自己的name属性)
static String camp;//类变量
package com.test1;
public class Mytest1
public static void main(String[] args)
// TODO Auto-generated method stub
Hero h1=new Hero();
h1.name="剑圣";
Hero h2=new Hero();
h2.name="剑魔";
System.out.println(h1.name);
System.out.println(h2.name);
以上是实例属性的案例,总结:未使用static修饰的为实例属性,属于对象所有,每个对象都拥有自己的实例属性,互不影响。
```java
package com.test1;
public class Hero
String name;//实例变量(每个对象都会拥有自己的name属性)
static String camp;//类变量
package com.test1;
public class Mytest1
public static void main(String[] args)
// TODO Auto-generated method stub
Hero h1=new Hero();
Hero.camp="近卫方";
Hero h2=new Hero();
Hero.camp="天灾方";
System.out.println(Hero.camp);
以上是类属性的案例,总结:静态static的类属性,因不属于对象,所以使用时直接通过类名加点操作符进行访问和使用。类属性属于类所有,整个项目中仅此一份,属于共享使用。
内容二:this关键字和方法调用
问题:Java中当我们的成员变量和方法中的局部变量名字相同的时候,如何保证使用正确呢?
答案:在类定义的时候可以通过THIS 关键字访问到该类中的实例属性,THIS 其实就是指向当前类的对象的地址,THIS 关键字最大的作用就是:让类中的一个方法访问该类中的另一个方法或实例成员变量。
下面我们一起来看看THIS关键字的使用以及通过THIS 关键字来解决成员变量和局部变量同名的问题:
package com.test1;
public class Hero
String name;
public void setName(String name)
this.name=name;
package com.test1;
public class Mytest1
public static void main(String[] args)
// TODO Auto-generated method stub
Hero h=new Hero();
h.setName("剑魔");
System.out.println(h.name);
总结:如果成员变量和局部变量同名时,可以使用this关键字来解决这个问题。
如果成员变量和局部变量同名时,你没有使用this关键字的话,那么将会出现下面这种情况:
package com.test1;
public class Hero
String name;
public void setName(String name)
name=name;
package com.test1;
public class Mytest1
public static void main(String[] args)
// TODO Auto-generated method stub
Hero h=new Hero();
h.setName("剑魔");
System.out.println(h.name);
总节:如果不使用this关键字,电脑会处于蒙圈状态,不知道你的name到底具体指的是哪个,因而结果是null空的,只有加上this关键字才能解决这个问题。
package com.test1;
public class Hero
String name;
public void setName(String name)
this.name=name;
//方法1
public void test1()
System.out.println("这是方法1执行的功能");
//方法2
public void test2()
this.test1();//这个this可以不写,他会默认调用当前类中的这个方法,但是为了可读性强就加上一个this
System.out.println("这是方法2执行的功能");
在这里大家需要注意:同一个类中的方法之间互相调用,可以直接去调用方法名,但是如果你在另一个类中想调用当前我们这个类中的方法就需要先创建对象然后再调用就可以了。所以THIS关键字这个作用就很明确了,就代表当前自己这个类中。
关于内容二this关键字的小节:THIS就相当于对类当前对象的一个引用,可以避免类中成员变量和局部变量重名时的冲突问题,因为this指的是当前对象,所以大家注意(!!!),THIS不能和static静态关键字一起使用,因为static修饰的成员不属于任何对象所有而属于类所有。
内容三:类的成员封装
封装是面向对象三大特征之一,封装的主要意思:该隐藏的隐藏,该开放的开放。
下面我们就来看看在Java中为什么需要封装以及怎么实现封装:
package com.test1;
//英雄类
public class Hero
private String name;
private int age;
//设置年龄数据
public void setAge(int age)
if (age<18)
System.out.println("年龄赋予不合法,请重新操作");
else
this.age=age;
//获取对象的年龄数据
public int getAge()
return this.age;
public String getName()
return name;
//该方法可以让外界访问
public void setName(String name)
if (name.length()<2||name.length()>6)
System.out.println("姓名赋予不合法");
else
this.name=name;
package com.test1;
public class Mytest1
public static void main(String[] args)
// TODO Auto-generated method stub
Hero h1=new Hero();
// h1.age=18;//不能使用,因为age是private私有成员
h1.setAge(18);
h1.setName("张三");
System.out.println("英雄的年龄是:"+h1.getAge());
System.out.println("英雄的姓名是:"+h1.getName());
总结:所以封装的概念其实很简单,就是把我们的一些需要隐藏的东西私有化,然后再提供一种公共的方法,让别人去访问他,就是这个目的。提高安全性,隐藏细节。
内容四:类中的静态方法和静态代码块
1.被static修饰的成员即为静态成员,静态成员包括:静态代码块,静态属性,静态方法。
2.静态成员不属于某个对象,仅属于静态成员所在的类。静态成员可以通过类名直接访问,也可以通过类的对象访问,一般推荐使用类名访问。
下面我们来看看静态成员的使用:
package com.test1;
public class Mytest
//类所有
static int number;
package com.test1;
public class test
public static void main(String[] args)
// TODO Auto-generated method stub
Mytest t1=new Mytest();
t1.number=100;
Mytest t2=new Mytest();
t2.number=10;
System.out.println(t1.number);
System.out.println(t2.number);
静态代码块的使用:
package com.test1;
public class Mytest
//静态代码块
static
System.out.println("静态代码块1");
static
System.out.println("静态代码块2");
static
System.out.println("静态代码块3");
package com.test1;
public class test
public static void main(String[] args)
// TODO Auto-generated method stub
Mytest t1=new Mytest();
以上是关于2021-08-16面向对象进阶的主要内容,如果未能解决你的问题,请参考以下文章