条件运算符
x?y:z
其中x为boolean类型表达式,先计算x的值,若为true,则运算结果为表达式y的值;否则整个运算结果为表达式z的值。
构造方法:
- 通过new关键字调用;
- 构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里面用return返回某个值;
- 如果我们没有定义构造器,则编译器会自动定义一个无参的构造函数。如果已定义则编译器不会自动添加;
- 构造器的方法名必须和类名一致。
- 构造方法的第一句总是super(),可不写。
创建一个对象分为如下四步:
- 分配对象空间,并将对象成员变量初始化为0或空或false;
- 执行属性值的显式初始化;
- 执行构造方法;
- 返回对象的地址给相关的变量。
this 的本职就是“创建好的对象的地址”。由于在构造方法调用前,对象已经创建。因此,在构造方法中也可以使用this代表“当前对象”。this不能用于static方法中。
static关键字
- 在类中,用static声明的成员变量称为静态成员变量,也称为类变量。类变量的生命周期与类相同,在整个应用程序执行期间都有效。
final关键字
- 修饰变量:被它修饰的变量不可改变。一旦赋了初值,就不能被重新赋值;
- 修饰方法:该方法不可被子类重写。但可以重载;
- 修饰类:修饰的类不能被继承。比如Math、String
继承extends
- java中类只有单继承,接口有多继承
- 子类继承父类,可以得到父类的全部属性和方法(除了父类的构造方法),但不见得可以直接访问(比如父类私有的属性和方法)
- 定义一个类,没有调用extends时,则它的父类是:java.lang.Object
instanceof运算符
- 左边是对象,右边是类;当对象是右边类或子类所创建的对象是时,返回true;否则,返回flase。
==和equals方法
- == 代表比较双方是否相同。如果是基本类型则表示值相同,如果是引用类型则表示地址相等即是同一个对象
- equals 默认比较两个对象的hashcode
super关键字
- super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性
public class TestSuper01 { public static void main(String[] args) { new ChildClass().f(); } } class FatherClass { public int value; public void f(){ value = 100; System.out.println ("FatherClass.value="+value); } } class ChildClass extends FatherClass { public int value; public void f() { super.f(); //调用父类对象的普通方法 value = 200; System.out.println("ChildClass.value="+value); System.out.println(value); System.out.println(super.value); //调用父类对象的成员变量 } }
- 构造方法第一句总是:super(…)来调用父类对应的构造方法。所以,流程就是:先向上追溯到Object,然后再依次向下执行类的初始化块和构造方法,直到当前子类为止。
public class TestSuper02 { public static void main(String[] args) { System.out.println("开始创建一个ChildClass对象......"); new ChildClass(); } } class FatherClass { public FatherClass() { System.out.println("创建FatherClass"); } } class ChildClass extends FatherClass { public ChildClass() { System.out.println("创建ChildClass"); } }
封装使用细节:类的属性的处理:
1. 一般使用private访问权限。
2. 提供相应的get/set方法来访问相关属性,这些方法通常是public修饰的,以提供对属性的赋值与读取操作(注意:boolean变量的get方法是is开头!)。
3. 一些只用于本类的辅助性方法可以用private修饰,希望其他类调用的方法用public修饰。
多态
- 多态指的是同一个方法的调用,由于对象不同可能会有不同的行为。现实生活中,同一个方法,具体实现会完全不同;
- 多态是方法的多态,不是属性的多态
- 多态的存在要有三个必要条件:继承,方法重写,父类引用指向子类对象
- 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了
抽象类abstract
- 有抽象方法的类只能定义为抽象类
- 抽象类不能实例化,既不能用new来实例化抽象类
- 抽象类可以包含属性、方法、构造方法。但是构造方法不能用来new实例,只能用来被子类调用
- 抽象类只能用来被继承
- 抽象方法必须被子类实现
- 抽象方法只有声明,没有实现
接口interfact
- 接口只有常量、抽象方法
- public static final 常量定义默认关键词
- public abstract 方法默认关键词
String、StringBuffer、StringBuider
- String 不可变类,不可变字符序列
- StringBuffer 线程安全,效率低
- StringBuilder 线程不安全,效率高