Java Class结构详解
2022-04-11 17:47:12 0 举报
Java Class文件组成详解
作者其他创作
大纲/内容
public(公共控制符)private(私有控制符)指定此方法只能有自己类等方法访问,其他的类不能访问(包括子类)protected(保护访问控制符)指定该方法可以被它的类和子类进行访问。final,指定该方法不能被重载。static,指定不需要实例化就可以激活的一个方法。synchronize,同步修饰符,在多个线程中,该修饰符用于在运行前,对他所属的方法加锁,以防止其他线程的访问,运行结束后解锁。native,本地修饰符。指定此方法的方法体是用其他语言在程序外部编写的。
类中方法的方法体
代码块
private
interface&interface.classinterface&class.classinterface&abstract.class
普通方法块
匿名内部类应该是平时我们编写代码时用得最多的,在编写事件监听的代码时使用匿名内部类不但方便,而且使代码更加容易维护使用匿名内部类能够在实现父类或者接口中的方法情况下同时产生一个相应的对象,但是前提是这个父类或者接口必须先存在才能这样使用。匿名内部类是唯一一种没有构造器的类。正因为其没有构造器,所以匿名内部类的使用范围非常有限,大部分匿名内部类用于接口回调。匿名内部类在编译的时候由系统自动起名为Outter$1.class。一般来说,匿名内部类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的实现或是重写。
编译
非抽象类
abstractClass.class
class Test{ class Test2{ }}
synchronized
interface.class
非访问修饰符
非抽象方法块
abstract class
interface
enum
成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。用this访问外部类成员外部类想访问成员内部类的成员却不是这么随心所欲了。在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问:成员内部类是依附外部类而存在的,也就是说,如果要创建成员内部类的对象,前提是必须存在一个外部类的对象。创建成员内部类对象的一般方式如下: Outter outter = new Outter();Outter.Inner inner = outter.new Inner();拥有多种修饰符
抽象方法
className&interface.classclassName&class.classclassName&abstract.class
内部类,接口
public(公共访问控制符),指定该变量为公共的,他可以被任何对象的方法访问。private(私有访问控制符)指定该变量只允许自己的类的方法访问,其他任何类(包括子类)中的方法均不能访问。protected(保护访问控制符)指定该变量可以别被自己的类和子类访问。在子类中可以覆盖此变量。friendly ,在同一个包中的类可以访问,其他包中的类不能访问。final,最终修饰符,指定此变量的值不能变。static(静态修饰符)指定变量被所有对象共享,即所有实例都可以使用该变量。变量属于这个类。transient(过度修饰符)指定该变量是系统保留,暂无特别作用的临时性变量。volatile(易失修饰符)指定该变量可以同时被几个线程控制和修改。
volatile
静态内部类
三种可以共存可以没有,但只能有一个public修饰。且名字与文件名相同
成员内部类
包名;此语句前不能有注释或空格
protected
构造块
用{}裹起来的代码片段,构造块在创建对象时会被调用,每次创建对象时都会被调用,并且优先于类构造函数执行。 构造块中定义的变量是局部变量。
static
public People getWoman(){ class Woman extends People{ //局部内部类 int age =0; } return new Woman(); }
非抽象方法
package packageName;
transient
1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。2)抽象类不能用来创建对象;3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
抽象
成员变量非抽象方法
default(friendly)
静态块
修饰符
同步块
*.class
静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法,这点很好理解,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非static成员就会产生矛盾,因为外部类的非static成员必须依附于具体的对象。
块
public static final变量(并且只能是public static final变量,用private修饰会报编译错误)方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误)
@interface
成员变量抽象方法非抽象方法
变量抽象方法
className.java
public(访问控制符),将一个类声明为公共类,他可以被任何对象访问,一个程序的主类必须是公共类。abstract,将一个类声明为抽象类,没有实现的方法,需要子类提供方法实现。final,将一个类生命为最终(即非继承类),表示他不能被其他类继承。friendly,默认的修饰符,只有在相同包中的对象才能使用这样的类。
abstract
内部类
局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。
访问修饰符
className.class
结构
局部内部类
import otherpackageName.className;import otherpackageName;import otherpackage.*;
interface Inner { String getName(); }
成员变量
接口泛指供别人调用的方法或者函数。从这里,我们可以体会到Java语言设计者的初衷,它是对行为的抽象。
class
抽象类
native
abstractClass&interface.classabstractClass&class.classabstractClass&abstract.class
匿名内部类
public class Test { public static void main(String[] args) { Outter.Inner inner = new Outter.Inner(); }} class Outter { public Outter() { } static class Inner { public Inner() { } }}
public
final
构造方法
同步代码块
strictfp
0 条评论
下一页