一个汉字为一个字符,两个字节
类中声明的变量有默认初始值;
方法中声明的变量没有默认初始值,这时候直接使用方法体中的变量时会出错
向上转型和向下转型
1、向上转型
Father f = new Son();
这时候的f只能调用父类方法,若覆盖或重写,则为覆盖后的方法
2、向下转型
Father f = new Son();
Son s = (Son) f;
这时候s可以调用父类和子类的函数,若子类重写了父类的函数,则为覆盖后的方法。
实现多态的机制-----重写和重载。
外部类和内部类
1.外部类可以调用子类的所有非私有方法
2.静态内部类只能访问外部类的静态方法和属性
3.非静态内部类不能申明任何静态成员
static是否能访问非static方法和变量
不可以访问
static属于类的,在类加载时会直接初始化,这时非static类还没加载
非static需要实例化。static不用实例化对象,这时调用还没加载的非static时就会出错。
线程
引入别人的图如下:
抽象类
抽象类和类一样,只是必须具有抽象方法
抽象类不能被实例化
抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
抽象方法只是声明,不包含方法体,就是不给出方法的具体实现。
构造方法和类方法(用 static 修饰的方法)不能声明为抽象方法。
抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
接口
接口只有方法的声明,没有方法体。
在接口中只有常量,public static final
一个类只能继承一个类,却可以继承多个接口
java中共享和私有线程隔离
引用别人的图
访问权限
default:指默认权限,也叫包访问权限,只能在同一包中访问(不管有没有继承)。
public:公开访问,所有地方
protected:可以在其他包中访问,(但前提是有继承关系)。
private:只能在当前类中访问
StringBuilder , StringBuffer ,String
StringBuilder , StringBuffer ,String 都是 final 的
StringBuffer线程安全,StringBuilder线程不安全
静态变量static在不同线程的不同实例中地址,但地址一样,在全局区。
final变量,如果是基本数据类型,则其数值一旦初始化后就不能被改变。如果是引用类型的变量,则对其初始化后,便不能再指向另一个对象,但是其里面的值是可以改变的。引用变量所指向的对象中的内容是可以改变的