java基础语法整理
java代码各种结构
| 静态常量 | 静态成员属性 | 静态代码块 | 成员属性(常量) | 构造代码块 | 构造函数 | 静态一般方法 | 一般方法 |
加载顺序从左往右
1.先静态后非静态
2.先父类后子类
3.属性-》代码块-》构造函数
java的修饰符
访问修饰符
| public | protected | 默认(default) | private |
|---|---|---|---|
| 所有类都能访问 | 同包下的类和子类 | 同包下的类 | 自己类本身(自己类下面的内部类) |
类访问修饰符:public、默认
类非访问修饰符:abstract(抽象)、final(常量)、strictfp(浮点按规定格式(IEEE754)计算)
父子类的继承关系:
访问修饰符没有作用域的对应关系、父类为final则不能被子类继承、父类为abstract则子类可以为abstract或非abstract,如果子类为非abstract则必须实现父类所有abstract的方法。
子类为final或abstract修饰时,不受父类非访问关系符的影响。但一个类不能既是final又是abstract的,语意上相矛盾。
父类为strictfp时,子类不继承父类的strictfp特性,如果子类也要求strictfp,需要自己在重新声明。当修饰类时表示该类的所有浮点数的计算都严格按照IEEE754的规范去执行。strictfp不能与abstract共用。
属性访问修饰符:public、protected、默认、private
属性非访问修饰符:static、final、volatile、transient
父子类的继承关系:
修饰符父子类不受限制,采用的是就近访问原则。如子类没有该属性,则再去查找父类,父类的修复符继承给子类。
final和volatile不能同时修饰使用:final修饰属性时表示基本类型的值和引用类型的地址不能被改变,而volatile修饰属性时表示线程使用的属性需与主内存的属性值同步,修改时需写入到共享主内存。语意上相矛盾,所以不能同时修饰。
transient常与Serilizable接口配合使用,表示transient修饰的变量不被序列化使用。但当与static一起使用时,transient的作用将失效,因为static修饰的变量均不能被序列化,它的值来源于jvm中的,不是反序列化得出的。
当属性为局部属性时,只能用final修饰,没有其他修饰符。
代码块访问修饰符:没有访问修饰符
代码块非访问修饰符:static
父子类的继承关系:
不受限制,加载顺序:静态父代码块-》静态子代码块-》父代码块-》子代码块
代码块有三种:静态代码块、代码块、局部代码块。
构造方法访问修饰符:public、protected、默认、private
无非访问修饰符
父子类的继承关系:
不受限制,加载顺序:父类代码块-》父类构造函数-》子类代码块-》子类构造函数
子类构造函数默认调用父类的无参构造函数、如需重新指定则通过super方式直接引用构造函数进行变更。且调用父类构造函数只能执行一次。也可以通过this的方式指定指定调用其他构造函数,但也只能指定一个,并且不能指定其本身的构造函数。
一般方法访问修饰符:public、protected、默认、private
一般方法非访问修饰符:static、final、synchronized、void、abstract、strictfp
父子类的继承关系:
子类方法的访问修饰符不能小于被重写的父类方法的访问修饰符的访问范围,否则会提示编译不通过。子类继承父类所有在访问修饰符能访问范围内的所有方法。
用final修饰的方法,则不能被子类重写,不能与abstract共用
用abstract修饰的方法,则子类一定要重写该方法或者该子类也是抽象子类,不能与final和static共用
用static修饰的方法,子类要重写则也一定是statci修饰的方法,且该方法可以通过类直接引用,不能与abstract共用
用void修饰方法,表示方法没有返回值,子类要重写则也一定是void修饰的方法,如是其他有返回值的对象,则也需要类型保持一致或者返回该类型的子类型。
用synchronized修饰反复方法,表示该方法是同步的。如果引用的都为非static方法,则子类调用父类同步方法的锁对象为子类对象,如果引用的为static方法,则子类调用父类同步方法的锁对象为父类。非静态方法表示同步锁对象为该对象本身,静态方法表示同步对象为该对象的类。所以该类所有的静态方法是同一把锁,该类所有的非静态方法是同一把锁。
用strictfp修饰方法,表示该方法内所有的浮点数计算都严格按照IEEE754规范的要求执行。strictfp不能与abstract共用。
内部类:成员内部类,局部内部类,匿名内部类,静态内部类
成员内部类,静态内部类
访问修饰符:public,protected,默认,private
非访问修饰符:static、final、strictfp
访问修饰符的作用域同外部类的。final也表示该类不能被子类重写。static是区分成员内部类和静态内部类的标识。成员内部类在外部引用时需要先创建外部对象,再创建内部类对象才能使用。静态内部类,可以直接通过外部类引用创建内部类对象,注意通过此种方法创建的内部类,外部类的静态代码块不会被加载。使用strictfp时表示该内部类的所有浮点数的计算都严格按照IEEE754的规范来执行。
局部内部类,匿名内部类
局部内部类,是作用在方法、代码块或构造函数中。作用范围仅在局部的作用域内,局部内部类引用的局部变量必须为final的,表示在局部内部类中该变量的引用不能被改变。
匿名内部类,是匿名内部类在使用时创建该对象的匿名内部类并重写相应的方法,执行该方法时,执行的是刚才重写的方法。
内部类的继承关系:内部类继承其他外部类的内部类,需要通过外部类的类引用来继承,如果子类内部类的外部类继承子类内部类的父类的外部类,则内部类子类可以直接继承内部类父类。静态内部类只能继承静态内部父类,成员内部类只能继承成员内部父类。静态内部类和成员内部类都可以继承外部类。
所有内部类里面都不含有静态成员变量、静态方法、静态代码块。静态常量除外。
