本文编写于 338 天前,最后修改于 335 天前,其中某些信息可能已经过时。

继承

  1. 普通类继承,并非一定要重写父类方法。
  2. 抽象类继承,如果子类也是一个抽象类,并不要求一定重写父类方法。如果子类不是抽象类,则要求子类一定要实现父类中的抽象方法。
  3. 接口类继承。如果是一个子接口,可以扩展父接口的方法;如果是一个子抽象类,可以部分或全部实现父接口的方法;如果子类不是抽象类,则要求子类一定要实现父接口中定义的所有方法。

equals与==操作符
指向同一个对象时才能使用==操作符
==时两边数据类型必须兼容
equals方法来自Object类,所有类继承
只可比较引用类型,作用与==相同。

Person p1 = new Person();
Person p2 = new Person();
System.out.println(p1==p2);//false
System.out.println(p1.equals(p2));//false
对于类File,String,Date及包装类来说,是比较类型及内容而不考虑引用的是否是一个对象:
原因:重写了本方法

String s1 = new String("ok");
String s2 = new String("ok");
System.out.println(s1 == s2);//false
System.out.println(s1.equals(s2));//true
对于类File,String,Date及包装类使用==比较的是对象(的地址),equals比较的是内容。
而其他的类的对象都比较的是对象(的内存地址)

字面量创建字符串和new创建字符串
字面量创建对象的时候只在常量池创建一个对象
new的时候常量池有对象在堆中也有对象
字面量方式要比new省内存。

装箱
Intager i = new Intager(111);
(Integer i1 = 111;//自动装箱
System.out.println(i);///111

Intager i = new Intager("abc");//编译不错,运行有误

拆箱
Intager i = new Intager(111);
(Integer i1 = 111;//自动装箱
int i0 = i.intValue();
(int i2 = i1;//自动拆箱)
System.out.println(i0);///111

boolean b = new Boolean("false").booleanValue();
(boolean b = new Boolean("false");//自动拆箱
Boolean b1 = true;//自动装箱)

字符串转变成基本数据类型
int i = Integer.parseInt("123");
float f = Float.parseFloat("0.4");
boolean b = Boolean.parseBoolean("false")

数据类型转变成基本字符串

String istr = String.Valueof(i);
String fstr = String.Valueof(i);
……
包装类用法:基本数据类型的包装类,基本数据类型与字符串之间的转换
.toString()输出当前对象的内存地址

构造代码块:是在类中直接定义的,用“{}”括起来的代码。每次调用构造方法前执行,都会先执行构造代码块

final关键字
final标记的类不能被继承
final标记的方法不能重写
final标记的变量即为常量,名称大写,且只能被赋值一次 ,类似于C中define宏定义
final String NAME = "";//final修饰的变量是常量,常量必须显示赋值
final static String NAME_1 = "";//final static一起修饰的变量,就是全局变量
常量定义名称约定使用大写,如果多个单词组成名称用_连接

抽象类:不能实例化,用来作为父类被继承,抽象类的子类必须重写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,仍为抽象类、
抽象方法:只有方法声明没有实现
只要类中有一个抽象方法,那么这个就必须是一个抽象类
抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
public(protected) abstruct void xxx();

接口:类似多重继承。(子类继承父类,只能继承一个父类,类可以实现多个接口,多个接口用,分割)

特点

1、Java接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量(大写,单词之间用"_"分隔)

2、Java接口中的方法默认都是public,abstract类型的(都可省略),没有方法体,不能被实例化

3、Java接口中只能包含public,static,final类型的成员变量和public,abstract类型的成员方法

4、接口中没有构造方法,不能被实例化

5、一个接口不能实现(implements)另一个接口,但它可以继承多个其它的接口

6、Java接口必须通过类来实现它的抽象方法

7、当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象类

8、不允许创建接口的实例(实例化),但允许定义接口类型的引用变量,该引用变量引用实现了这个接口的类的实例

9、一个类只能继承一个直接的父类,但可以实现多个接口,间接的实现了多继承.

//如果实现接口的类没有实现借口中的全部方法,必须将此类定义为抽象类

接口实例:工厂模式
内部类,解决Java不能多继承的问题

异常:try{可能异常代码段}catch(捕获异常){输出异常}finally{}

抛出异常throw(s)
//可以在main方法中继续抛出异常
//main方法中抛出异常直接抛出到虚拟机,在程序中无法处理

public class Test1{

public static void main(String[] args) {
    B b = new B();
    try{//throws在代码这抛出异常,在调用方去捕获处理
        b.test();
    }catch(Exception e){
        e.printStackTrace();
    }
}

}

class B{

int i;
public void test() throws Exception{//可以使用throws在代码这抛出异常,在调用方去捕获处理
    B b = null;
    System.out.println(b.i);
}

}
//at xxx.B.test(Test1.java:578)
//at xxx.Test1.main(Test1.java:7)

//父类中有抛出异常的方法,子类也必须要重写,但是不能写被重写方法范围更大的异常类型