- Java提供的类内的访问修饰符,具有C++类似的功能,主要包括:privat, public 和protect。
- Public 公共访问权限。被Public修饰的字段或方法,可在全局中访问,前提是这个类也是Public的。

2. Private修饰的,外部无法访问其内部细节。
3. Protected的使用,是在继承关系中,父类需要将一个方法暴露给子类的时候。
- JavaBean的相关规范
- 必须使用public来修饰类
- 必须包含公共无参数的构造器
- 包含属性的操作手段和,如赋值或者获得属性值之类。
成员包括:方法method,事件event 和属性property。
-
- 成员变量不是属性。
- 属性通过setter/getter决定的。
个人感觉,其实JavaBean的规范和C++的相关规范很像。学过C++都知道成员变量用public private等修饰符修饰的时候,在函数外访问的权限是不一样的。下面是代码,可以体会一下:
1 class User{ 2 private int a; 3 private String n="AAA"; 4 public int getA() { 5 return a; 6 } 7 public String getN() { 8 return n; 9 } 10 public void setA(int x) { 11 a=x; 12 } 13 14 } 15 class JavaBean_Trial { 16 public static void main(String[] args) { 17 User u1=new User(); 18 u1.setA(1110); 19 String get=u1.getN(); 20 System.out.println(get);//AAA 21 } 22 }
这些代码无非就是定义了一些setter和getter,用public来修饰之后,在类外调用这些Public修饰的方法,可以访问和修改类内private修饰的字段。
- This 关键字:表示当前对象。
- 构造器中的this,指得是当前创建的那一个对象。
- 方法中this: 哪个对象调用this所在的方法,那么this表示那个对象。这个类似于js中的this。这里的先决条件是:this是出现在方法中的。
1 //上述的类内其它方法省略 2 public void show() { 3 System.out.println(this.name+":"+this.age); 4 } 5 6 } 7 class JavaBean_Trial { 8 public static void main(String[] args) { 9 User u1=new User(); 10 u1.setAge(10); 11 u1.setName("AAA"); 12 u1.show();//AAA:10 13 14 User u2=new User(); 15 u2.setAge(100); 16 u2.setName("BBB"); 17 u2.show();//BB:100 18 } 19 }
This使用的场景包括:
-
- 解决成员变量和参数重名的问题。
1 public void setName(String name) { 2 this.name=name; 3 }
-
- 同类的实例方法互相调用。
1 public void show() { 2 System.out.println(this.name+":"+this.age); 3 } 4 public void sayHello() { 5 System.out.println("成功调用sayhello"); 6 this.show();//this可以省略 7 }//当我用对象u1调用sayHello的时候,sayHello会接着调用show,同时会显示出u1的name和age属性。
-
- this可作为参数传递给另一个方法。指代调用这个方法的对象。
- this作为方法的返回值,出现在链式编程中。
- static和this不能同时使用。首先要明白,static是类域,而this指的是对象的索引。当static在jvm加载的时候,还没有对象,所以不能使用this.
- 构造器重载时候的互相调用问题。一般少参数的构造器,调用多参数的构造器。
1 User(String name, int age, int weight, int height){ 2 this.name=name; 3 this.age=age; 4 this.weight=weight; 5 this.height=height; 6 }//overridden constructor 4 7 8 User(int age){ 9 10 this("x",age,0,0);//User(String name, int age, int weight, int height) 11 this.age=age; 12 }//call constructor 4
在决定是用构造器还是用setter注入方法?当需要根据数据来构造对象的时候,建议使用构造的方式来创建对象。可以节省代码。
class line {
private int x;
private int y;
line(){};
line(int start, int end){
x=start;
y=end;
}//constructor line 1
public void setX(int start) {
x=start;
}//setter x
public void setY(int end) {
y=end;
}//setter y
}
//在main接口内
line L1=new line(1,2);//call constructor line 1
line L2=new line();//initialize
L2.setX(1);//set x
L2.setY(2);// set y
显然L1的创建更快捷。
浙公网安备 33010602011771号