1.this
1.1是什么
是当前对象内存地址,是每一个对象中保存自己内存地址的一个引用变量
1.2能干什么
1.在成员方法或者构造方法中,使用this来区别成员变量和局部变量
class Student{ //在成员方法中区别是成员变量和局部变量
int age = 2;
int score = 1;
public static void m1(int age){
this.age = 1;
}
public m2(int score){
this.score = score;
}
}
2.在构造方法中,可以重载调用当前对象的其他构造方法(放在第一行)
public static void main(){
Info i = new Info(1970,1,1);
i.print();
}
class Info{
private int year;
private int month;
private int day;
public info(){
this(1970,1,1);
}
public void print(){
Sysout.out.println(year+"年"+month+"月"+day+"日");
}
}
3.return this链式调用
1.3怎么用
public class This_02 {
public static void main(String[] args) {
This_02 t = new This_02();
//链式调用
//只要前者的返回值是能够调用后者的对象则可以进行链式调用
}
public void m1(){
System.out.println("m1执行了");
}
public This_02 m2(){
System.out.println("m2执行了");
return this;
}
}
注意:this不会出现在静态方法之中
2.static
2.1是什么
是修饰符,来区分静态变量和成员变量
2.2能干什么
1.使用static修饰的变量是成员变量
public static void m1(){ //静态方法
static int i = 1; //静态变量
}
2.使用static修饰的方法是成员方法
3.成员语句块
static{
Sysout.out.println("静态语句块");
}
生命周期只有一次会在main函数之前自动调用,做初始化操作
2.3怎么用
注意:访问类静态属性加载该类,做初始化操作
3.实例语句块
简单来讲可以看做没有名字的成员方法,只有一对大括号.
每次创建对象时,实例语句块都会被执行,并且在构造方法之前执行
执行顺序:静态 - > main->实例->构造
4.软件包机制
软件包机制可以将文件分类管理,另外解决了命名冲突
package限制的是class文件的存放位置,和java的源文件没有关系
package语句必须在第一行
带有package 语句 的代码这样运行
编译 javac-d./encoding utf-8 xxxx.java
运行 java 包名.类名
5.import
如果用到的是java.lang.* 类,则不需要导入,因为java.lang包下为核心类
同包的类可以直接调用,不同包的类应该写全名(包名.类名)
自动导入包可能会导名字相同的包但是不是自己需要的包
6.权限控制符
public 公共的,在哪里都可以访问,只要能找得到
private 私有化,只有在当前类中可以使用
protected 继承权限,受保护的,同包可以使用或者继承关系时,子类可以使用
default 如果不写权限控制,则为包权限,只有同包的类可以使用,其他地方无法使用
7.继承
继承是从已有的类派生出的新类,新的类有能力吸收已有的类的属性和值,并且还扩展新的功能
java只支持单一类的继承,一个类只有一个父类,一个父类会有很多子类
java的类的继承会传递的
引入继承会提高代码的复用性
当一个类没有显示被另一个类继承时,会默认继承java.lang.object 这个是根类
被私有化的类是不能被继承
8.super
super是保存父类型特征用的,用于在子类中保存父类
在子类成员/构造方法中区分父类与子类同名的成员变量,必须在子类构造方法的第一行
如果在子类构造方法中,没有显示this()或者super()默认第一行是super()调用父类无参构造,this与super不能同时出现
9.方法覆写
Override 方法的覆写
是对继承方法的重新编写
什么时候需要用到覆写?
当父类的功能无法满足子类的需要时,子类要根据自己的要求重写继承父类的方法
要求
必须要有继承的关系
方法名必须相同,返回值,参数列表,都必须相同
重新的方法不能比原来的方法有更低的访问权限
不能比原方法有更宽泛的异常
覆写特指成员方法,只有成员方法会发生覆写
覆写的目的
1.满足需求 2.减少错误 3.访问的权限变广泛
Override与Overload的区别
参数列表是否与原方法相同
@Override注解 源码注解 生成class文件后就会被删除掉
该注释是一种检查机制,会检查该方法是否符合方法覆写的要求