|
类一级成员 |
实例成员 |
属于 |
类本身 |
类创建的实例对象 |
举例 |
static(变量/方法/初始化块)、内部类 |
普通成员 |
直接访问 |
类名.member |
对象.member |
class superc{int i=5;void show(){System.out.println("the i is :"+i);}
}
public class subc extends superc{int i=6;public static void main(String[] arg){subc s=new subc(); System.out.println(s.i);s.show(); //父类域中的show}
}output->
6
the i is :5
//变量i的访问权限修饰符缺省,继承后默认为同包可见
//在创建子类对象时,同名变量遵循变量遮蔽,覆盖父类i
//在调用show方法时,i的作用域为整个父类,包括方法
|
重载overload |
重写override |
|
类内 |
父子类间 |
方法名 |
同 |
同 |
参数列表 |
不同 |
同 |
返回值 |
(无关) |
同 |
方法体 |
不同 |
不同 |
访问权限 |
|
不能比父类更严格 |
错了3个输出👆:B重写父类同名方法后没有A-A的输出
输出为:in Son.show-Father(f2向上转型后重写Father类内的Father方法,并损失掉Son/Grandson作为形参的特有方法
多态 |
动态绑定 |
静态绑定 |
|
编译 |
运行 |
|
重写方法oberride(类间,只异方法体) |
重载方法overload(类内,只用同名) |
|
虚函数(能被子类重写的方法) |
final、static、private修饰的方法 |
|
实例方法 |
成员变量 |
绑定类型 |
对象类型(实际) |
引用类型(声明) |
|
接口interface |
抽象类abstract |
|
只有常量+抽象方法 |
至少一个抽象方法(只声明不实现) |
方法默认 |
public abstract |
|
常量(字段)默认 |
public static final |
|
单个类可以有 |
多个接口 |
唯一抽象类 |
构造方法 |
没有 |
可以有 |
|
|
不能被final修饰 |
enum CarType{ACar,BCar,CCar};interface Car{void drive();
}
//具体类
class ACar implements Car{@Overridepublic void drive(){System.out.println("ACar is ready");}
}
class BCar implements Car{@Overridepublic void drive(){System.out.println("BCar is ready");}
}
class CCar implements Car{@Overridepublic void drive(){System.out.println("CCar is ready");}
}//工厂类
class CarFactory{public static Car getInstance(CarType ct){if(ct!=null)switch (ct) {case ACar:return new ACar(); case BCar:return new BCar();case CCar:return new CCar();default:return null;}return null;}
}public class test{public static void main(String[] args){//接口不能实例化,只能通过具体类实现向上转型Car c1=new ACar();c1.drive();Car c2=CarFactory.getInstance(CarType.BCar);c2.drive();}
}
|
实例内部类 |
静态嵌套类 |
局部内部类 |
匿名内部类 |
属性 |
类成员 |
独立,类一级成员 |
类方法内,特性同局部变量 |
|
持有outer.this实例 |
1 |
0 |
0 |
1 |
可以被static修饰 |
1 |
1 |
0 |
0 |
依附outer实例 |
1 |
0 |
1 |
1 |
有constructor |
1 |
1 |
1 |
0 |
访问outer的private |
1 |
1 |
1 |
1 |
访问权限 |
outer所有(含private |
outer静态成员 |
outer所有,方法的final局部变量 |
outer所有,方法的final局部变量 |
名称 |
描述 |
NullPointerException |
空指针异常 |
IndexOutOfBoundsException |
数组索引越界异常 |
ArithmeticException |
算术异常,比如除以0 |
ClassCastException |
类型转换异常,试图将一个对象强制转换为不兼容的类型 |
NumberFormatException |
数字格式异常,将字符串转换为数字时格式错误 |
IllegalArgumentException |
向方法传递了错误类型、空值、或者超出范围的值 |
IOException |
输入输出异常,通常发生在文件操作中 |
方法 |
类型 |
描述 |
e.getMessage() |
String |
获取异常的简要描述信息 |
e.toString() |
String |
返回异常的类名和详细消息,格式为:类名: 消息 |
e.printStackTrace() |
void |
将异常的堆栈跟踪信息打印到控制台 |
e.getStackTrace() |
StackTraceElement 数组 |
异常对象相关的堆栈跟踪信息 |
area (test:10)
main (test:15)
|
描述 |
词性 |
位置 |
throws |
声明异常 |
预告 |
( )后{ }前 |
throw |
抛出异常 |
行动 |
类体内 |
//String类型常用函数
String str=new String("wer chinese, ur korean.");
System.out.println(str.length());
System.out.println(str.indexOf('r'));
System.out.println(str.startsWith("we"));
System.out.println(str.compareTo("hello"));
System.out.println(str.substring(1,5));
str=str.replaceAll("r "," are ");
System.out.println(str);
String[] strs=str.split("[,\\s]",4);
for(var v:strs)System.out.println(v);
//1.增强式for循环
for(String s:a)System.out.println(s);//2.foreach
a.forEach(o->{System.out.println(o);});//3.迭代器iterator
Iterator<String> i=a.iterator();
while(i.hasNext())System.out.println(i.next());//4.普通for
for(int j=0;j<a.size();j++)System.out.println(a.get(j));