美文网首页
基础知识一

基础知识一

作者: li_荔枝 | 来源:发表于2019-08-02 16:21 被阅读0次

    一、抽象类与接口

    抽象类

    特点: 

    1.抽象类中可以构造方法 

    2.抽象类中可以存在普通属性,方法,静态属性和方法。 

    3.抽象类中可以存在抽象方法。 

    4.如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。

    5.抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。

    6,抽象类不能被实例化,抽象类和抽象方法必须被abstract修饰

    关键字使用注意:

    抽象类中的抽象方法(其前有abstract修饰)不能用private、static、synchronized、native访问修饰符修饰。

    接口

    1.在接口中只有方法的声明,没有方法体。

    2.在接口中只有常量,因为定义的变量,在编译的时候都会默认加上public static final

    3.在接口中的方法,永远都被public来修饰。

    4.接口中没有构造方法,也不能实例化接口的对象。(所以接口不能继承类)

    5.接口可以实现多继承

    6.接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法则实现类定义为抽象类。

    7,接口可以继承接口,用extends。

    二、 java里的静态变量是放在了堆内存还是栈内存?

    堆区: 

    1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令) 

    2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 

    栈区: 

    1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中 

    2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。 

    3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。 

    方法区: 

    1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。

    2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

    3.运行时常量池

    常量池:

    1.常量池中包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值。

    1.1 这些类是Byte,Short,Integer,Long,Character,Boolean,另外两种浮点数类型的包装类则没有实现。另 外Byte,Short,Integer,Long,Character这5种整型的包装类也只是在对应值小于等于127时才可使用对象池,也即对象不负 责创建和管理大于127的这些类的对象。大于127的对象存放在堆中。

    1.2 String类也实现了常量池技术

    2.常量池还包含一些以文本形式出现的符号引用,比如:

    2.1 类和接口的全限定名;

    2.2 字段的名称和描述符;

    2.3 方法和名称和描述符。

    三、&,| 与&&,||

    1.对于&

    String s = null;看下面一段代码

    if( (s!=null) & (s.length()>0) ) // String s = null;没有给s开辟空间,s.length()报NullPointerException没有指向的错误

    2.对于&&

    String s = null;

    if( (s!=null) && (s.length()>0) )//&&和|| 是按照“短路”方式求值的。如果第一个操作数已经能够确定表达式的值,第二个操作数就不必计算了

          位移运算符:&和| 运算符应用于布尔值,得到的结果也是布尔值,不按“短路”方式计算。即在得到计算结果之前,一定要计算两个操作数的值。

    四、内部类

    1. 静态内部类:

        1). 静态内部类本身可以访问外部的静态资源,包括静态私有资源。但是不能访问非静态资源,可以不依赖外部类实例而实例化。

    2. 成员内部类:

        1). 成员内部类本身可以访问外部的所有资源,但是自身不能定义静态资源,因为其实例化本身就还依赖着外部类。

    3. 局部内部类:

        1). 局部内部类就像一个局部方法,不能被访问修饰符修饰,也不能被static修饰。

        2). 局部内部类只能访问所在代码块或者方法中被定义为final的局部变量。

    4. 匿名内部类:

        1). 没有类名的内部类,不能使用class,extends和implements,没有构造方法。

        2). 多用于GUI中的事件处理。

        3). 不能定义静态资源

        4). 只能创建一个匿名内部类实例。

        5). 一个匿名内部类一定是在new后面的,这个匿名类必须继承一个父类或者实现一个接口。

        6). 匿名内部类是局部内部类的特殊形式,所以局部内部类的所有限制对匿名内部类也有效

    五、final

    final 修饰符

    final 变量:

    final 变量能被显式地初始化并且只能初始化一次。被声明为 final 的对象的引用不能指向不同的对象。但是 final 对象里的数据可以被改变。也就是说 final 对象的引用不能改变,但是里面的值可以改变。

    final 修饰符通常和 static 修饰符一起使用来创建类常量。

    final 方法:

    类中的 final 方法可以被子类继承,但是不能被子类修改。

    声明 final 方法的主要目的是防止该方法的内容被修改。

    如下所示,使用 final 修饰符声明方法。

    final 类:

    final 类不能被继承,没有类能够继承 final 类的任何特性。

    值传递引用传递:https://www.zhihu.com/question/31203609?sort=created

    六、变量初始化

    1. 类的初始化顺序:父类静态变量 --> 父类静态代码块 --> 子类静态变量 --> 子类静态代码块 -->      父类非静态变量 --> 父类非静态代码块 --> 父类构造方法 --> 子类非静态变量 --> 子类非静态代码块 --> 子类构造方法。

    2. 全局变量不初始化有默认值,局部变量必须初始化后才能使用,否则编译错误。

    相关文章

      网友评论

          本文标题:基础知识一

          本文链接:https://www.haomeiwen.com/subject/rgqvhctx.html