提到Java的面向对象就一定知道他的特性:封装、继承、多态(抽象)。
1.成员变量与局部变量的区别:
成员变量:存放于对内存,定义在Java程序的类里边方法外边,有默认的初始值不能被static修饰,随着对象的创造而产生,消失而消失。
局部变量:存放在栈内存中,定义在方法里边,没有默认的初始值,需要定义赋值,随着方法的调用而存在,方法的结束而消失。
2.static和final关键字:
用static修饰成员变量或方法就可以把他们分别变成静态变量或静态方法;他们都是属于类的,可以直接用类名调用访问;他们是先于对象存在的,被所有对象共享;静态方法只能调用静态属性(变量或方法),要想调用非静态的可以先创建对象,通过对象来调用访问。
final关键字修饰的类不能被继承,修饰的方法不能被重写,修饰的变量值不能改变(变量是基本数据类型的话是值不能改变,如果是引用数据类型的话空间地址不能改变,而里边的内容值是可以改变的)。
3.方法重载(overload)和方法重写(override)
overload:在同一个类里面,可以有多个同名字的方法,但需要他们的参数列表里的参数不同(个数不同或者类型不同),与返回值无关,这就是方法重载。
override:在继承里面,子类的方法和父类的方法一模一样(包括返回值类型,参数列表都要相同),这就是方法重写。
但父类的私有方法不能被重写(那叫定义),子类重写父类的方法不能权限更低,父类的静态方法也需要用静态方法重写(也可以不叫重写)。
4.单例设计模式:就是一个类只能创建一个对象;
1)饿汉式:
class Singleton{
private void Singleton(){}
private Singleton s = new Singleton();
public static Singleton getInstance(){
return s }
}
2) 懒汉式:
class Singleton{
private void Singleton(){}
private Singleton s = null;
public static Singleton getInstance(){
if(s == null){ s = new Singleton(); }
return s;
}
5.抽象类和接口:
抽象类:abstract 修饰符 返回值 类名{} 用abstract修饰的类;有构造方法,但是并不能用来调用创建对象,还有可以通过向上转型方式来创建对象(父类名 对象名 = new 子类名(););有抽象方法的类一定是抽象类,但抽象类并不一定有抽象方法,因为抽象类里边可以定义可实现的方法,同时也可以定义变量。抽象类不能用final修饰,因为final和abstract这两个修饰符不能同时修饰一个类或方法;抽象类的子类要么也是抽象类,否则子类一定要实现抽象类里的所有抽象方法。
接口:interface 接口名; 没有构造方法,也不能创建对象也和抽象类一样的方式创建对象的;不是类但和类是平级的;一个类可以实现多个接口:class 类名 implements 接口1,接口2...{} 接口的子类要么抽象类要么实现接口的所有抽象方法;接口里的方法默认是 public和abstract修饰的,因此接口里的方法都是抽象方法;接口里没有变量,因为常量默认是public static final 修饰的;接口只能被接口继承可以多继承(一个接口继承多个接口中间用逗号隔开);JDK8以后接口里可以有实现的方法,但只限于用final或static修饰的方法;
(红色字体的是不同点)