1.This
1.是什么:是每个对象中,保存自身内存地址的一个引用类型变量
this就表示当前对象
2.能做什么:
1.在成员方法或者构造方法中,区分同名的成员变量和局部变量
this.xxx
2.用在构造方法中,重载调用当前类中其他构造方法,但是必须写在构造方法第一行
this(xxx)
3.return this 返回当前对象的内存地址,可以链式调用
3.怎么用:
1.区分静态和局部,成员和局部
静态变量可以和局部变量同名,局部变量优先级更高,使用类名区分同名的静态变量和局部变量
System.out.println(a);
System.out.println(类名.a);
成员变量可以和局部变量同名,局部变量优先级更高,可以使用this区分同名的成员变量和局部变量
int d = 2;
public void m1(){
int d = 3;
System.out.println(d);
System.out.println(this.d);
}
2.重载调用构造方法:
调用当前类的指定构造方法。但是,该写法只能写在构造方法中,并且必须是第一行
public MyDate(){
this(1970.1.1);
}
public MyDate(int year,int month,int day){
this.year = year;
this.month = month;
this.day = day;
}
3.链式调用:
public class This_02{
public static void main(String[] args){
This_02 t = new This_02();
t.m1();
t.m2();
t.m1().m2();
}
}
4.注意
1.this不能出现在静态上下文中。 无法从静态上下文中引用非静态变量。
2.static
1.是什么:
修饰符,关键字,用来区分静态变量
2.能做什么:
1.在类体中使用static修饰的变量是静态变量
2.用static修饰的方法是静态方法
3.还可以使用static定义静态语句块
3.静态语句块:
等同于静态方法,自动执行,在程序加载阶段执行完成,并且只执行一次
由于执行时机在main方法之前,且只执行一次,所以非常适合做一些初始化工作
静态变量和static是同等优先级,多个static语句块从上往下执行
访问一个类的静态属性的时候,这个类才会加载
4.实例语句块:
等同于成员方法,没有static修饰的语句块就是成员语句块
创建对象后立即执行,每创建一个对象,就执行一次,并且在构造方法之前
输入:public class Static{
System.out.println("实例语句块1");
System.out.println("实例语句块2");
Static{
System.out.println("静态语句块");
}
Static(){
System.out.println("构造方法");
}
public static void main(String[] args){
System.out.println("main方法");
new Static();
new Static();
}
}
输出: 静态语句块
main方法
实例语句块1
实例语句块2
构造方法
实例语句块1
实例语句块2
构造方法
3.封装
1.Package:软件包机制
1.主要解决了命名冲突问题,在类名前加命名空间
2.完整的类名是带有包名的,包名.类名才是这个类的名字
3.package语句必须出现在java源文件的第一行
4.package语句是规定编译后的class文件保存的位置,和源文件无关
5.命名规则: 一般采用公司域名倒叙
2.Import
1.import java.util.*; 表示导入util下所有类
2.import语句用于把当前类中需要的其他类载入
必须出现在class语句之上,package语句之下
java.lang.*:该包下所有类均为系统核心类,使用时不需要导入
只要不在同一包内,必须通过包名.类名才能找到该类
注意:按空格或者回车会自动导包,如果程序没问题但报错,可以查看是否导包错误
3.权限控制
public:公共的,哪里都能访问
private:只能在当前类访问
default:不屑权限控制修饰符,默认为default,同包中即可访问
protected:受保护的,继承权限,要么同包要么有继承关系
4.继承
1.是什么:就是在已有的类中派生出新的类,新的类能吸收已有类的属性和行为
Java中只支持单继承,不支持多继承,并且继承可以传递
一个类只能继承一个父类,但一个类可以被很多子类继承
2.能做什么:
继承目的:代码复用,提高效率,若父类满足不了子类需求,可以进行覆写,可以使用多态
如果一个类没有显示继承一个类,那么该类默认继承Object
java.lang.Object是java中提供的根类,所有类都直接或简介的继承这个类
3.怎么用:
语法: class 类名 extends 父类名 {类体}
public class SubClass extends SupClass{
public void m1(){
System.out.println("我是子类m1");
}
}
5.Super
1.是什么:
代表了父类的特征
2.能做什么:
1.用在成员方法和构造方法中,区分父类子类之间同名的方法和变量
super.xxx (类似于 this.xxx)
2.用在子类构造方法中,调用指定的父类构造方法
super(xxx);
如果在子类构造方法中没有显示出现super()也没有出现this(xxx)则默认有一个super()调用父类无参构造
并且super(xxx)必须出现在子类构造方法第一行,所以this(xxx)和super(xxx)不能同时出现
3.怎么用:
1.区分父类子类同名的属性
2.调用父类的构造方法
4.注意:
如果在子类构造方法中,没有显示出现super() 也没有出现 this(xxx)
则默认有一个super() 调用父类无参构造,
并且 super(xxx) 必须出现在子类构造方法 第一行
所以 this(xxx) 和 super(xxx) 不能同时出现,
因为构造方法第一行有super()调用父类构造,所以
某一个类如果构造方法私有化了,那么该类不会再被继承。
6.覆写/重写
1.是什么:
写一个和父类一样的方法,但是功能不一样
1.方法名.返回值.参数列表 必须和父类一致
2.不能比原方法拥有更低的访问权限
3.不能比原方法拥有更宽泛的异常
覆写特指成员方法,也就是只有成员方法可以覆写
2.应用场景:
当父类功能无法满足子类需求的时候,进行覆写
@Override : 是源码注解,在编译的时候会判断该方法是否为覆写的方法,错了就会报错
该注解再编译为class文件后就会被去掉