1.static修饰属性
被static修饰的变量叫静态变量或类变量,否则叫非静态变量(实例变量)
该类的多个对象共享一个静态变量
类变量随着类的加载而加载,早于对象的创建,类只会加载一次,所以类变量在内存中只有一份,存在于方法区的静态域
类名.静态变量名 Math.PI
2.static修饰方法
随着类的加载而加载,类名.方法名
静态方法中只能调用静态方法和静态属性
static修饰的方法不满足多态,见下面的例子
public class Empty {
public static void print() {
System.out.println("empty");
}
}
public class EmptyBrain extends Empty {
public static void print() {
System.out.println("emptyBrain");
}
}
@Test
public void test() {
Empty e = new EmptyBrain(); //empty 此处不满足多态
e.print(); //emptyBrain
new EmptyBrain().print();
}
3.单例Singleton模式
类的单例设计模式————此类只能有一个对象实例
思路:1.不能在类外new该类对象,需要把构造器设置为private
2.私有化静态对象
3.静态get方法
单例的饿汉实现
线程安全
priveta static Person person = new Person();
单例的饱汉(懒汉)实现
目前写法线程不安全
priveta static Person person = null;//需要的时候再去创建对象
public Person getPerson(){
if(person == null)
person = new Person();
return person;
}
4.给main方法传参数
//命令行给String args[]传参数
java MainTest 89 89 "89"
5.代码块
静态代码块
随着类的加载而执行,只会执行一次
非静态代码块
随着对象的创建而执行,每次创建对象执行一次
与属性显式(int attribute = 1;)赋值平级,按先后顺序执行
顺序
对于同一个类:静态代码块-->代码块-->构造器
有继承关系的类:静态代码块-->父类代码块-->父类构造器-->子类代码块-->子类构造器
6.final关键字
被修饰的类不能被继承,如String类、System类
被修饰的方法不能被重写,如Object类的getClass()
被修饰的属性只能显式初始化或代码块或构造器中初始化,初始化后不可被赋值,eg:final int CONSTANT = 12;
被修饰的局部变量,只能被赋值一次
被static final修饰的称为全局常量
7.抽象类和抽象方法
abstract修饰类
不可实例化
抽象类有构造器,可以有非抽象方法
继承抽象类的非抽象类需要重写父类所有的抽象方法
abstract修饰方法
抽象方法只存在于抽象类中
public abstract void method();
abstract不能用来修饰private、static、final修饰的方法,不可修饰final修饰的类,因为private、final修饰的方法不可被重写
8.匿名类
创建一个匿名的(Person的)子类对象
Person person = new Person(){
public void method(){
方法体;
}
}
9.接口
JDK7.0
只能定义全局常量和抽象方法
全局常量public static final(可以省略不写)
抽象方法public abstract(可以省略不写)
JDK8.0
增加了静态方法和默认方法
使用
接口的使用具有多态性
接口可以多继承
接口的匿名实现类
eg: new Usb(){
public void method(){
方法体;
}
}
10.代理模式Proxy
//代理类
class Server implements Network{
private Network net;
public Server(Network net){
this.net = net;
}
@Override
public void overrideMethod(){
stepAhead();
net.overrideMethod();//真实的接口实现类对象
stepAfter();
}
}
11.简单工厂模式
//对象创建者与使用者分离
public class CarFactory{
public static Car getCar(String model){
if("Audi".equals(model)){
return new Audi();
}else if("BYD".equals(model)){
return new BYD();
}else{
return null;
}
}
}