美文网首页
Java-02 方法&继承

Java-02 方法&继承

作者: 哆啦_ | 来源:发表于2020-06-10 13:54 被阅读0次

方法

参数传递

值类型是值传递,对象是引用传递,传递的是地址

方法签名

方法签名由方法名参数类型组成, 不包括返回值

同一个类中,不能定义两个方法签名一样的方法

方法的重载(Overload)

Java的方法支持方法重载:方法名相同,方法签名不同。
也就是方法名相同,参数类型/个数不同

继承

子类的构造函数必须先调用父类的构造函数,如果没有调用,编译器会帮着自动调用父类的无参数的构造函数(如果父类没有无参数的构造函数,则会报错)

Static

static常用来修饰类的成员:成员变量、方法、嵌套类

  • 成员变量

    • 被static修饰:叫做类变量,静态变量
    • 在程序运行过程中只占用一份固定的内存(存储在方法区)
    • 可以通过实例、类访问(一般是通过类来访问)
  • 方法

    • 被static修饰的话一般叫做类方法/静态方法
    • 类方法里不能使用this
    • 可以直接访问类变量、类方法

成员变量的初始化

编译器会自动为未初始化的成员变量设置初始值

  • 手动给实例变量提供初始值

    • 跟其他语言类似
    • 通过初始化块来初始化
    
    public Person(){
    
    }
    public Person(int age) {
    this.age = age;
    }
    // 初始化块 
    // 通过初始化块来初始化变量
    {
    // 初始化块中的代码会在复制到构造函数的头部先执行(编译器帮我们做的)
    // 也就是构造函数会先执行初始化块中的代码 再执行之后的代码
    age = 10;
    }
    
  • 类变量设置初始值

    • 声明中
    • 静态初始化块中
      • 当一个类初始化时会执行静态初始化块
      • 当一个类第一个被主动使用时,JVM会对类进行初始化
      public static int count;
    // 通过静态初始化块给类变量设置初始值
    static {
    count = 10;
    }
    
  • 可以用多个(静态)初始化块,按照在源码中出现的顺序执行


public class Person {
  public Person(){
    System.out.println("Person - constructor");
  }
  // 初始化块 
  {
    System.out.println("Person - block");
  }


  // 通过静态初始化块给类变量设置初始值
  static {
    System.out.println("Person - static block");
  }
}


public class Student extends Person {
  public Student(){
    System.out.println("Student - Constructor");
  }
  {
    System.out.println("Student - block");
  }
  static {
    System.out.println("Student - static block");
  }
}

Student stud = new Student();

// 打印顺序
Person - static block
Student - static block
Person - block
Person - constructor
Student - block
Student - Constructor

单例

方式一


// 1. 饿汉式 线程安全
public class Singleton {
  // 声明的时候就初始化 
  public static Singleton instance = new Singleton();

  // 构造方法私有化
  private Singleton(){
    // 私有化构造函数 这样外面就不能调用构造方法
  }
  // 构造一个静态方法 返回唯一的静态变量
  public static Singleton getInstance(){
    return instance;
  }
}

方式二

// 懒汉式 线程不安全的 
public class Singleton {
  // 静态变量在程序运行中只有一份内存
  public static Singleton instance = null;

  // 构造方法私有化
  private Singleton(){
    // 私有化构造函数 这样外面就不能调用构造方法
  }
  // 线程不安全的 
  public static Singleton getInstance(){
    if(instance == null) {
      // 当有多个线程同时访问时 可能会多个线程都会走到这里
      // 会创建多个实例
      // 但是在后续使用的时候 instance指向的实例对象还是同一个
      instance = new Singleton();
    }
    return instance;
  }
}

相关文章

  • Java-02 方法&继承

    方法 参数传递 值类型是值传递,对象是引用传递,传递的是地址 方法签名 方法签名由方法名和参数类型组成, 不包括返...

  • 原型相关(二)

    1.继承 继承方式:接口继承(只继承方法签名)实现继承(继承实际的方法)ECMAScript只支持实现继承,并且主...

  • 我碰到的前端面试题(js)

    1.js实现继承有哪几种方法? 方法一:原型链继承 方法二: 构造函数继承 方法三: 组合继承 2.this指向问...

  • 7、面向对象的程序设计3(《JS高级》笔记)

    三、继承 许多OO语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际方法。由...

  • 继承

    一. 单继承 继承的概念一般子女继承父辈 2.多继承 3.重写、调用父类方法 二. 静态方法和类方法 1、类方法 ...

  • 面向对象——继承

    许多OO语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际的方法。ECMAS...

  • 高程三 关于原型链 阅读笔记

    许多OO语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际的方法。由于函数没...

  • js面向对象设计---继承

    许多OO语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际的方法。如前所述,...

  • javaScript继承

    很多面向对象语言都支持两种继承:接口继承和实现继承,前者继承方法签名,后者继承实际的方法。接口继承在 ECMAS...

  • 2021-03-15 Dart中的多继承

    extends 继承implements 继承(父类方法必须要实现)with 多继承(父类不能有构造方法)on ...

网友评论

      本文标题:Java-02 方法&继承

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