java基础..

垃圾回收机制
程序启动是 gc随之启动,监视堆内存的变化,当对内存到达一个临界值时候让gc去回收
堆内存分为新生代和老圣代







java中堆栈方法区 
堆:存放的是对象,被所有的线程所共享
栈:存放的是基本数据类型的对象和 对象的引用  线程私有的
方法区:存放类的信息,static变量   有常量池   核心类库







访问权限修饰符
默认:default修饰的方法/属性只能在本包中的类访问到(本包的子类可以访问到,不是本包的


子类访问不到)
protected:本包可访问,子类可访问(在子类中可以访问到,但是在别的类中创建子类的对象去


点是点不到的)






static
static修饰的变量/方法会加载到方法区的静态区
static修饰的变量是唯一的,在内存中只会加载一次
static修饰的方法可以被继承,不能被重写 (在子类中可以存在和父类名字一样的静态方法,


但是不是重写)
如果在代码块里写了一个i=1的赋值语句,会暂时的放在那里(标识赋值),在稍后可以声明,标


识赋值优先于赋值        如果在声明的时候不进行赋值的话,值就是标识赋值的值;如果重新进行赋


值的话,就是重新赋的值
在类加载的时候,静态属性/方法会随着加载到方法区的静态区
静态方法里不可以定义静态变量









继承: 
子类继承父类,子类的访问权限修饰必须是大于父类的(特别是在继承接口/抽象类的时候要注


意,父类的访问权限符默认是public,所以子类继承类,实现接口的时候要注意访问权限修饰符要是


public的)
向上造型 A a = new B();  用父类对象的声明创建了子类的对象,作为向上造型的代价,子类


牺牲了自己有而父类没有的方法(如果用a去调用b类私有的方法,会编译报错).
子类可以继承父类的属性..在向上造型中,如果子类和父类有同名的属性,用谁声明的,在调用


时就是调用的谁的属性.
如果只有返回值不一样,不算重载








加载顺序
父类的静态代码块--->子类的静态代码块--->父类的代码块(成员变量)--->父类的构造方


法--->子类的代码块(成员变量)--->子类的构造方法
需要注意的是: 代码块和成员变量是平级的,谁写的顺序在前面,就先加载谁.







final
final修饰的变量不能被修改(基本变量值不可变,引用类型引用不可变),方法不可被重写(但


是可以被继承),类不可以被继承.
final修饰的变量,必须在对象创建之前进行赋值(可以在静态代码块,代码块,构造方法中)
final static 修饰修饰的变量(常量),必须在类加载之前进行赋值
被private修饰的方法相当于final方法




接口
在1.7及之前接口中的所有方法都是抽象方法,实现接口必须实现接口中的所有的抽象方法
接口中可以定义属性, 不能有构造器   在1.8之后,接口中可以有普通的方法
接口中的属性默认使用public static final 来修饰的
接口中的方法是用public abstract来修饰的(只能用这两个修饰符来修饰,子类重写方法的时


候要注意访问修饰符必须是public的)
接口是一个模板,规范














抽象类
类可以多实现,接口可以多继承
当类中存在抽象方法的时候就是抽象类   
abstract中可以有构造方法,但是不能被实例化  
抽象类中的方法可以被私有化,可以重载重写. 可以定义属性,可以有main方法  
抽象类中不一定有抽象方法















内部类(类或者接口中定义类)
有局部内部类,成员内部类,静态内部类,匿名内部类
局部内部类:定义在代码块或者方法里的内部类 , 可以定义非静态的属性和方法,可以定义


final常量.  可以拿到外部类的所有的属性和方法,      如果要拿到本方法的属性,属性要用final修


饰(1.7及以前),1.8会隐式的转成final属性,     不能用访问修饰符来修饰
成员内部类:定义在类内方法外, 可以定义非静态的属性和方法, 可以房屋内外部类的所有的


属性和方法,  可以用访问权限修饰符去修饰       如果内部类和外部类有同名的属性.在访问的时候


按照就近原则就会调用内部类的属性,如果要调用外部类的属性,要用外部类.this.属性去调用      
静态内部类: 用static修饰的成员内部类.   可以定义静态和非静态的属相和方法      只


能访问外部类的静态方法和属性  
匿名内部类:  没有名字的内部类     只要是可以被继承或者实现的类或者接口都可以定义


匿名内部类







super  this   
super父类对象的引用  调用父类的属性和方法
在子类的构造器中都会隐式的调用父类的构造器  super();
父类如果自己写了有参构造,要在子类的构造器中显示的调用
super可以调用父类的静态属性/方法



方法
如果传入的是基本类型的数据,使用完成后就会销毁,不会对传入的参数造成影响
如果传入的是引用类型的数据,会对地址指向的内存造成影响






见过的异常
ClassCastException 类型转换异常(是编译时异常)
NullPointException 空指针异常(用一个null的对象去发起调用就会报)
StackOverFlow栈溢出 (两个方法互相调用, 是运行时异常) 
算数异常
数组下表越界





运算符
!  ()  算数运算符 关系运算符  逻辑运算符  赋值运算符




















猜你喜欢

转载自blog.csdn.net/ifenggege/article/details/80557784
今日推荐