this
调用属性和方法
调用本类的构造器
package
JDK中主要的包介绍
import
super
通常情况下习惯省略“super”,特殊情况⬆️ 见注意第一条。
调用父类构造器
static
无论产生了多少对象,某些特定的数据在内存空间中只有一份。随着类的加载而加载。
使用范围
修饰属性
静态变量(static修饰):我们创建了类的多个对象,多个对象共享同一个静态变量。当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过了的。
实例变量:我们创建了类的多个对象,每个对象都独立的拥有一套类中的非静态属性。当修改其中一个对象中的非静态属性时,不会导致其他对象中同样的属性值的修改。
- 静态变量随着类的加载而加载。可以通过”类.静态变量”的方式进行调用。
- 静态变量的加载要早于对象的创建。
- 由于类只会加载一次,则静态变量在内存中也只会存在一份:存在方法区的静态域中。
- 静态属性举例:
System.out;
Math.PI;
修饰方法
- 静态方法(static修饰):只能调用静态的方法或属性。
- 非静态方法:既可以调用非静态的方法或属性,也可以调用静态的方法或属性。
静态方法不能使用this关键字、super关键字,不能被重写(从生命周期的角度去理解)。
final
abstract
抽象类的匿名子类 ```java public class PersonTest {
public static void main(String[] args) {
method(new Student());//匿名对象
Worker worker = new Worker();
method1(worker);//非匿名的类非匿名的对象
method1(new Worker());//非匿名的类匿名的对象
System.out.println("********************");
//创建了一匿名子类的对象:p
Person p = new Person(){
@Override
public void eat() {
System.out.println("吃东西");
}
@Override
public void breath() {
System.out.println("好好呼吸");
}
};
method1(p);
System.out.println("********************");
//创建匿名子类的匿名对象
method1(new Person(){
@Override
public void eat() {
System.out.println("吃好吃东西");
}
@Override
public void breath() {
System.out.println("好好呼吸新鲜空气");
}
});
}
public static void method1(Person p){
p.eat();
p.breath();
}
public static void method(Student s){
}
}
class Worker extends Person{
@Override
public void eat() {
}
@Override
public void breath() {
}
}
---
<a name="KF1Yt"></a>
## interface
![image.png](https://cdn.nlark.com/yuque/0/2022/png/1534487/1648782868385-7b80019b-6bd1-463c-8ab2-c67c7599c40c.png#clientId=u930ab843-0051-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=254&id=u1f7a6786&margin=%5Bobject%20Object%5D&name=image.png&originHeight=750&originWidth=1674&originalType=binary&ratio=1&rotation=0&showTitle=false&size=398353&status=done&style=none&taskId=u6d591ec2-b37b-4550-b2de-1944aa7cd20&title=&width=567.4000244140625)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/1534487/1648806782383-80e4e7b7-edd4-4d9a-83ee-09c5ad8a764e.png#clientId=uf3ea4880-00b6-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=300&id=ud70b3fb1&margin=%5Bobject%20Object%5D&name=image.png&originHeight=930&originWidth=1760&originalType=binary&ratio=1&rotation=0&showTitle=false&size=266085&status=done&style=none&taskId=ub7bd2b5a-5084-4925-b3b8-dd6911e816e&title=&width=567)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/1534487/1648806918885-1c25c627-1a72-489e-a683-d7abc6d7f37c.png#clientId=uf3ea4880-00b6-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=261&id=u05f9bb31&margin=%5Bobject%20Object%5D&name=image.png&originHeight=818&originWidth=1656&originalType=binary&ratio=1&rotation=0&showTitle=false&size=279588&status=done&style=none&taskId=u853a371e-4f37-4524-89c3-a4479352712&title=&width=528)
<a name="GX7ZX"></a>
### 接口和抽象类对比
![image.png](https://cdn.nlark.com/yuque/0/2022/png/1534487/1648808070452-e80cafef-e8bc-495b-948d-4db2c16aa06a.png#clientId=ua6cf7a45-b2cd-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=300&id=u554c6b25&margin=%5Bobject%20Object%5D&name=image.png&originHeight=768&originWidth=1656&originalType=binary&ratio=1&rotation=0&showTitle=false&size=257003&status=done&style=none&taskId=uf7bfa311-a3fb-46e0-b95e-8dd837a1a64&title=&width=647)
```java
Computer com = new Computer();
//1.创建了接口的非匿名实现类的非匿名对象
Flash flash = new Flash();
com.transferData(flash);
//2. 创建了接口的非匿名实现类的匿名对象
com.transferData(new Printer());
//3. 创建了接口的匿名实现类的非匿名对象
USB phone = new USB(){
@Override
public void start() {
System.out.println("手机开始工作");
}
@Override
public void stop() {
System.out.println("手机结束工作");
}
};
com.transferData(phone);
//4. 创建了接口的匿名实现类的匿名对象
com.transferData(new USB(){
@Override
public void start() {
System.out.println("mp3开始工作");
}
@Override
public void stop() {
System.out.println("mp3结束工作");
}
});
Java 8中接口的新特性
public interface AA {
double PI = 3.14;
public default void method() {
System.out.println("北京");
}
default String method1() {
return "上海";
}
public static void method2() {
System.out.println(“hello lambda !");
}
}