Java学习2-2_面向对象进阶

二、面向对象进阶

1.1 封装 private

1.1.1 描述

​ 指一种将抽象性函式接口实现细节部分包装、隐藏起来的方法。

​ 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

​ 要访问该类的代码和数据,必须通过严格的接口控制。

​ 封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。

​ 适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

1.1.2 封装的优点
  1. 良好的封装能够减少耦合
  2. 类内部的结构可以自由修改
  3. 可以对成员变量进行更精确的控制。
  4. 隐藏信息,实现细节。

1.2 this

​ 在Java基础中,this关键字是一个最重要的概念。使用this关键字可以完成以下的操作:

  1. 调用类中的属性

  2. 调用类中的方法或构造方法

    • 调用另一个构造方法时,调用的代码必须编写在构造方法的第一行

      class Person {
              
              
          private String name;
          private int age;
      
          Person() {
              
              
              this("qs",21);
              System.out.println("hello");//此句必须放在调用其他构造函数的语句之后
          }
      
          Person(String name, int age) {
              
              
              this.name = name;
              this.age = age;
          }
      
      }
      
  3. 表示当前对象

1.3 static

1.3.1 概述
  1. static表示“静态”的意思,可以用来修饰成员变量和成员方法。 static的主要作用在于创建独立于具体对象的域变量或者方法

     	2. 被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问,**存储在方法区内**
     	3. 并且不会因为对象的多次创建而在内存中建立多份数据
    
1.3.2 重点
  1. 静态成员在类加载时加载并初始化
  2. 无论一个类存在多少个对象,静态属性永远在内存中只有一份
  3. 在访问时:静态不能访问非静态,非静态可以访问静态

1.4 代码块

  1. 普通代码块:在执行的流程中出现的代码块成为普通代码块

  2. 构造代码块:

    1. 在类中的成员代码块,称为构造代码块,在每次创建对象时执行,执行在构造方法之前
    2. 意义,构造函数不一定都会执行,多个构造函数,但是构造代码块会执行
    3. 可以有多个构造代码块
    class Person {
          
          
        private String name;
        private int age;
    
        /*
         * 构造代码块,在对象创建时执行,在构造方法之前
         * 意义,构造函数不一定都会执行,多个构造函数,但是构造代码块会执行
         * 可以有多个构造代码块
         */
        {
          
          
            System.out.println("执行构造代码块");
        }
    
        Person() {
          
          
            this("qs",21);
            System.out.println("hello");
        }
    
        void say() {
          
          
            System.out.println("姓名:"+this.name+" 年龄:"+this.age);
        }
    }
    
  3. 静态代码块:

    1. 在类中使用static修饰的成员代码块,称为静态代码块,在类加载时执行。每次启动程序到关闭,只会执行一次的代码块
    2. 意义:初始化,类的基本属性初始化
    class Person {
          
          
        private String name;
        private int age;
    
        static {
          
          
            System.out.println("执行静态代码块");
        }
    
        Person() {
          
          
            this("qs",21);
            System.out.println("hello");
        }
    
        void say() {
          
          
            System.out.println("姓名:"+this.name+" 年龄:"+this.age);
        }
    }
    
  4. 同步代码块

    多线程中

面试题:构造方法与构造代码块以及静态代码块的失踪顺序

​ 静态代码块 -> 构造代码块 -> 构造方法

猜你喜欢

转载自blog.csdn.net/Sky_Coolssy/article/details/108685549