java修饰符和this关键子解析
简单明了的的表格介绍
java的四个关键字:public、protected、default、private(他们决定了紧跟其后被定义的东西可以被谁使用)
适用范围<访问权限范围越小,安全性越高>
访问权限 类 包 子类 其他包
public ∨ ∨ ∨ ∨ (对任何人都是可用的)
protect ∨ ∨ ∨ × (继承的类可以访问以及和private一样的权限)
default ∨ ∨ × × (包访问权限,即在整个包内均可被访问)
private ∨ × × × (除类型创建者和类型的内部方法之外的任何人都不能访问的元素)
访问控制
private限制构造函数后,其他类中将不能够通过new的方式来获取这个类的对象,能够有效控制对象的创建行为,这在有些设计模式中是非常重要的。
类的修饰符
// public,默认,abstract,final。 public class Test1 {} class Test2{} abstract class Test3{} final class Test4{}
abstract是表示该类为一个抽象类,不能实例化该类,即不能使用Test3 test3 = new Test3();的方式获取Test3的实例。final表示该类不能被子类继承,该类即为最终类,不可再被继承。
接口修饰符
接口比较特殊,接口的修饰符只有public和默认(default),其控制权限和变量完全相同,不再赘述。
值得注意的是,接口中的变量只能为:public static final 变量名。当然了,你也可以不写这些修饰符,编译器会自动帮你加上的,因为编译器默认情况下就是这样修饰的。
接口中的方法,只能用public和abstract修饰符,当然了,你也可以不写这些修饰符,同样,编译器会自动帮你加上的。
this关键字的三种用法
-
引用成员变量
public class ThisDemo { public static void main(String[] args) { Student s=new Student("小明明",20); System.out.println(s); } } class Student{ String name; int age; public Student(String name, int age) { //注:没有加this name = name; age = age; } @Override public String toString() { return "Student [ name=" + name + ", age=" + age +"]"; } }
打印结果:
Student [ name=null, age=0]
赋值没有成功,说明:name(局部变量)=name(局部变量);
而不是name(成员变量)=name(局部变量);public Student(String name, int age) { //注:可以使用this进行区分成员变量和局部变量 this.name = name; this.age = age;}
打印结果:
Student [ name=小明明, age=20]
这样子就可以赋值成功啦 -
代表当前对象的引用
this关键字除了可以引用变量或者成员方法之外,还有一个重大的作用就是返回类的引用。如在代码中,可以使用return this,来返回某个类的引用。此时这个this关键字就代表类的名称。如代码在上面student类中,那么代码代表的含义就是return student。可见,这个this关键字除了可以引用变量或者成员方法之外,还可以作为类的返回值,这才是this关键字最引人注意的地方。
例如:public Student(String name, int age) { //注:可以使用this进行区分成员变量和局部变量 this.name = name; this.age = age; //上述两行代码就相当于(假设当前实例对象为s) { s.name = name; s.age = age; }}``` 3. 代表构造器与构造器之间的调用```javaclass Student{ String name; int age; int id; public Student(String name, int age, int id) { this.name = name; this.age = age; this.id = id; System.out.println("构造器3已调用"); } public Student(String name, int age) { this(name,age,0); System.out.println("构造器2已调用"); } public Student(String name) { this(name,0);//参数不足,就使用参数默认值补全 System.out.println("构造器1已调用"); } @Override public String toString() { return "Student [ id=" + id + ", name=" + name + ", age=" + age +"]"; } }
//构造器用法–>this();跟函数一样()中可以写参数
构造器调用一般是这样子用的.不同的构造器中存在相同代码.为了复用性。可以在参数少的构造器中调用参数多的构造器
参考
别说你懂修饰符——深入分析Java修饰符
java中四种访问修饰符区别及详解全过程
java this 3种常见用法 详解
Java中this关键字详解