这里写目录标题
- 1、static总结
- 1.1 代码块
- 1.1.1 静态代码块
- 1.1.2 实例代码块
- 1.1.3 小例子
- 2、继承
- 2.1 权限修饰符
- 2.2 方法重写
- 2.3 子类访问成员特点
- 2.4子类构造器的特点
- 3、多态
- 4、final、常量
- 4.1 final
- 4.2 常量
- 5 抽象类
- 5.1 概念
- 5.2 模板设计方法
- 6、接口
- 6.1 接口新方法
- 6.2 接口其他特性
1、static总结
1、static 可以用来修饰变量和方法 变为类变量或者类方法。
类变量和类方法 跟随类一起加载,由于类只被加载一次,所以类变量和类方法也只被加载一次。
2、类变量和类方法属于类本身,所有对象可共享,直接使用类名.类变量或者类方法名 就可以调用,也可以使用实例.来调用/
3、类方法只能访问类变量;
实例方法既可以访问实例变量也可以访问类变量;
实例方法允许使用this关键字,类方法不允许。
4、单例设计模式:
①设计模式是指解决一个问题的最优解
②单例设计模式 确保一个类只有一个对象 可以节约内存 比如任务管理器,运行时环境等,只有一个对象即可。
写法:
饿汉式单例:在拿对象时,对象就已经创建好了。
package com.cky.static_demo;public class A {//2、创建一个私有的类对象private static A a=new A();//1.构造器私有private A(){}//3' 设计一个方法 返回类对象public A getA(){return a; //由于类对象 只加载一次 所以不论调用几次 都是一个对象}
}
懒汉式单例:在拿对象时,才创建对象
package com.cky.static_demo;public class A {//2、创建一个类对象用来保存private static A a;//1.构造器私有private A(){}//3' 设计一个方法 返回类对象public A getA(){if(a==null){ //第一次a=new A();}return a; //由于类对象 只加载一次 所以不论调用几次 都是一个对象}
}
1.1 代码块
代码块分为静态代码块 和 实例代码块
代码块都在构造器之前运行。
1.1.1 静态代码块
写法:
static {}
特点:
由于类只会加载一次,所以类代码块也只会加载一次
作用:
用来完成对类的初始化 比如一些类变量 Socket 中就使用了静态代码块。
1.1.2 实例代码块
写法:
{}
特点:每次创建类对象时,都会被调用,且在构造器之前被调用
作用:
完成对类对象的初始化,例如对实例对象进行初始化赋值。
1.1.3 小例子
package com.cky.static_demo;public class A {//静态代码块static {System.out.println("111");}//实例代码块{System.out.println("222");}//构造器public A(){System.out.println("333");}
}
package com.cky.static_demo;public class Test {public static void main(String[] args) {A a = new A();}}
结果
:
111
222
333
2、继承
java是单继承,但是可以多层继承。
2.1 权限修饰符
2.2 方法重写
2.3 子类访问成员特点
2.4子类构造器的特点
在调用子类构造器时,都会先调用父类构造器(可以不写,会自动在上边加super()。
但是如果父类构造器 写了一个有参数构造器,
①要么在子类中显示写出调用的父类有参构造器
②要么,在父类中在添上一个无参构造器.因为如果自己写了一个有参构造器,就不会自动生成无参构造器了。
this(…) 可以被用来调用本类中的其他构造器(兄弟构造器),但是要注意:this(…)和super(…)不能写在一起,因为如果调用了兄弟构造器,则最底层的兄弟构造器是会调用父类构造器的。
3、多态
多态 分为 对象多态
(比如一个人 可以是老师 也可以是母亲等)和行为多态
(对于跑这个动作,对于学生来说 可能跑的快 但是老师 可能就会跑得慢)
对于属性变量 没有多态一说
对于行为 编译看左边,执行看右边。
对于属性 编译看左边,执行看左边。
多态有一个缺点:
即无法执行子类自己独有的方法,编译不同过,此时我们需要进行强转。
package com.cky.dt;public class Test {public static void main(String[] args) {People p=new Student();p.run();//编译看左边,执行看右边System.out.println(p.name);//编译看左边,执行看左边People p1=new Teacher();p1.run();System.out.println(p1.name);go(p);go(p1);}//强转 因为不强转无法执行 子类独有的功能(由于编译看左边public static void go(People p){if(p instanceof Student){Student s=(Student)p;s.learn();}else {Teacher t=(Teacher) p;t.teach();}}
}
class People{public String name="cui";public void run(){System.out.println("people run");}
}
class Student extends People{public String name="kai";public void run(){System.out.println("Student run");}public void learn(){System.out.println("Student learn");}}
class Teacher extends People{public String name="yue";public void run(){System.out.println("Teacher run");}public void teach(){System.out.println("Teacher teach");}}
结果:
Student run
cui
Teacher run
cui
Student learn
Teacher teach
4、final、常量
4.1 final
final 可以用来修饰类,方法和属性
修饰类即表示该类不能被继承或者实现了。
修饰方法,证明该方法不能被重写。
修饰变量,证明该变量只能被赋予一次值,不能二次赋值。
变量:局部变量和全局变量 全局变量又分为静态成员变量和实例成员变量。
final 修饰基本数据类型,即该值不能被二次修改。
final修饰引用数据类型是指其地址不能被修改,比如数组,但是我们还是可以修改其值的。
4.2 常量
java中的常量通常被 static final修饰
比如 public static final String ADDRESS="上海";
在编译时 直接就被宏替换了 而不用通过ADDRESS 再去找到"上海这个值",节约时间。
5 抽象类
5.1 概念
5.2 模板设计方法
6、接口
接口案例:
分析:
在这里我们首先可以先 定义一个学生类 用来保存学生的信息,之后定义一个班级类 用来保存所有学生信息以及进行一个操作,比如打印学生信息等等。
但是由于打印学生信息有两套方案,我们不能在一个里边完成,这时候就需要接口了,
定义一个接口类,里边有两个方法(抽象),接着用两个类去实现它,已完成不同的操作,最后在班级类里实例化该接口,如果用方案一就实例化方案一的类,以此类推。