this
//测试
public static void main(String[] args){
Person person = new Person(3, "xiaoMing");
}
//创建一个类:
class Person{
int age;
String name;
public Person(int age,String name){
this.age = age; //this:当前对象,在这里是指person这个对象。
this.name = name;
}
}
- 可以调用构造器
①调用本类的其他构造器
②不能调自己
③构造器中使用this,则必须放在构造器的 首行
class Person{
int age;
String name;
public Person(int age){ //①
this.age = age;
}
public Person(int age, String name){
this(age); //调用① 构造器
this.name = name;
}
}
//测试:
public static void main(String[] args){
Person person = new Person(3, "xiaoMing");
}
super
- ① 若子类的属性(方法等)和父类的重名,可以用super.属性(方法等)调用父类的属性(方法等)【重写是个范例】
- ② super调用父类构造器;
在子类构造器中声明super,则必须声明在首行,this和super不能同时出现
在构造器首行,没有显式出现super,默认是super()构造器
static
- 不能修饰构造器
- static修饰的变量,叫静态变量,没有用static修饰的变量叫 实例变量,静态变量内存种独一份,被所有对象共享,当且仅当类被初次加载时会被初始化,而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
- 静态变量在内存中存在一份,在方法区中的静态域中。
- static修饰方法,叫静态方法,静态方法中只能声明静态属性,方法。
非静态方法即可调用静态方法也可调用非静态方法
- 在static方法中,不能使用this和super关键字
final
- final修饰的属性可以被赋值的地方有:显式初始化,代码块中初始化,构造器中初始化
class Person{
int age ;
String name;
final int C = 3; //显式初始化
final int B ;
final int A ;
{
B = 3; //代码块中赋值
}
public Person(){
A = 3; //构造器中赋值
}
public Person(int n){
A = n; //若用构造器赋值,则每写一个构造器都要赋值一次,
//因为有的构造器不一定用
}
}
- 修饰类:此类不能被继承,'断子绝孙',不能说明该类中的属性和方法是final的
- 修饰方法:此方法不能被重写,但是仍然可以继承
- 修饰属性:
①若该属性是基本数据类型,则不能被修改
②若该属性是引用数据类型,如数组,对象,则该对象,数组的值可以被修改,
但是引用不能修改。
//1.
class Dog1{
String name;
//编译错误,age必须赋值
final int age = 3;
}
//测试
final Dog1 dog = new Dog1();
System.out.println(dog);
dog.name = "dd";
System.out.println(dog.name); //输出dd
dog.name = "cc";
System.out.println(dog.name); //输出cc,里面的值可以改
dog = new Dog1(); //编译错误,引用不能修改
//2.
final int[] arr = {11,33,44};
arr[2] = 2; //可以修改
System.out.println(arr[2]); //输出2
arr = new int[]{1}; //error,编译错误,引用不能修改
- final还可以修饰局部变量:作用就是让局部变量不能再修改了
class Person{
public void show(final int a){
a = 3; //error,表示a只能使用不能修改
}
public void show2(int a){
final int b = 3; //表示b不能修改了
b = 4; //error
}
}
static final 修饰属性:表示全局常量