Java基础随记2

Java 基础随记


- Java中的this

this是指当前对象自己。在写一个方法的时候,如果想在方法内部获得对当前对象的引用就可以用this。this表示对“调用方法的那个对象”的引用。也就是说this指的是方法所属的类的对象的引用。

  • 调用当前对象中的成员变量或方法:this.当前对象中的成员变量或方法
  • 调用当前对象的构造方法:this(参数)

- 内部类

  • 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类;

  • 内部类的方法可以直接访问外部类的所有数据,包括私有的数据。

  • 例子:

      //外部类HelloWorld
      public class HelloWorld {
    
       // 内部类Inner,类Inner在类HelloWorld的内部
      public class Inner {
      
          // 内部类的方法
          public void show() {
              System.out.println("welcome to imooc!");
          }
      }
    
      public static void main(String[] args) {
      
          // 创建外部类对象
          HelloWorld hello = new HelloWorld();
          // 创建内部类对象
          Inner i = hello.new Inner();
          // 调用内部类对象的方法
          i.show();
      }
    
      }
    

- Java 中的静态内部类

静态内部类是 static 修饰的内部类,这种内部类的特点是:

  1. 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问

  2. 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员

  3. 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();

  • 代码:

      //外部类
      public class HelloWorld {
    
      // 外部类中的静态变量score
      private static int score = 84;
      private  int scoree = 23;
      // 创建静态内部类
      public static  class SInner {
          // 内部类中的变量score
          int score = 91;
      
          public void show() {
              // 只能访问score,不能访问scoree
              System.out.println("访问外部类中的score:" + HelloWorld.score );
              System.out.println("访问内部类中的score:" + score);
          }
      }
    
      // 测试静态内部类
      public static void main(String[] args) {
          // 直接创建内部类的对象
          SInner si = new SInner();
          // 调用show方法
          si.show();
      }
    
      }
    

继承

  • 父类的private方法是无法被子类访问或覆盖的
  • 创建一个子类对象时,程序内部执行顺序为:
    • 父类属性初始化
    • 父类构造方法(super();
    • 子类属性初始化
    • 子类构造方法
  • super
  • 子类的构造过程必须调用父类的构造方法
  • 子类的构造方法中如果没有显示调用父类构造方法,则默认调用无参构造
  • 显示调用父类构造方法必须在第一行
  • 如果没有显示调用,而父类又没有无参构造方法,编译时则报错

Java中的final和static

- final

  • 声明 final 字段有助于优化器作出更好的优化决定,因为如果编译器知道字段的值不会更改,那么它能安全地在寄存器中高速缓存该值。
  • final 字段还通过让编译器强制该字段为只读来提供额外的安全级别。
  • final可以修饰变量、方法及类;
  • 当定义一个final变量时,jvm会将其分配到常量池中,程序不可改变其值,相当于一个常量,初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中,不能不赋值;
  • 当修饰一个方法时,该方法在子类中将不能被重写;
  • 当修饰一个类时,该类不能被继承。

- static

  • 静态成员或类成员:它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。

  • 静态方法或类方法:

  • 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。


  • 如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。


  • 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。


  • Java 中的 static 使用之静态初始化块

    • 例子:
    • 结果:
    • 结论:
      1. 程序运行时,静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法
      2. 静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。

- instanceof语句

  • A instanceof B
  • 用于判断对象A是不是B类型,进而判断是否可以装化。

- 抽象类abstract

  • 应用场景:
  • 在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法
  • 从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类做为子类的模板,从而避免子类设计的随意性
  • 作用:限制规定子类必须实现某些方法,但不关注实现细节
  • 使用规则:
  1. abstract定义抽象类
  2. abstract定义抽象方法,只有声明,不需要实现
  3. 包含抽象方法的类是抽象类
  4. 抽象类中可以包含普通的方法,也可以没有抽象方法
  5. 抽象类不能直接创建,可以定义引用变量抽象方法没有方法体以分号结束
  • 代码例子:
  • 父类:


  • 则子类为:(自动添加父类中的方法)


  • 由例子可知可用于写模板

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,954评论 18 399
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 7,597评论 0 11
  • 本文主要是慕课网 Java入门第二季 这一课程的学习笔记。 1. 类和对象 1. 类的重要性:所有Java程序都以...
    evansyangs阅读 2,755评论 0 1
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 5,013评论 0 2
  • 当遍地是iPhone的时候,你是否有时候想去改变点什么,是否相与众不同,现在动手党们的福利来了,将自己的iPhon...
    科技圈阅读 5,033评论 1 1