封装

封装

  • 1、什么是封装?有什么用?

    作用:1.保证内部结构的安全

    ​ 2.屏蔽复杂,暴露简单

    • 代码级别上,封装有什么作用?

      一个类体中的数据,封装之后,无需关心代码的复杂实现,只需要一个简单的入口就可以访问了。类体中安全级别较高的数据,就不容易被误操作修改。

      class PersonTest{
          private int age;//private 表示私有的,被他修饰的关键字只能在本类中访                               问。出了这个类,age属性就不能被访问了。
      }
      
      public class Test{
          public static void main(String[] args){
              Person p = new Person();
          }
      }
      
    • 外界要是想访问,得调用两个方法,读(get)和改(set)。

    • 注意:

      方法在调用时参数传递和类型无关,都是将变量中保存的那个“值”复制一份传过去,那个值可能是一个数字也可能是一个地址。

  • 2、实例方法

    • 实例方法:对象级别的方法(又叫 实例方法)

      • 实例相关的变量叫实例变量(实例属性)
      • 实例相关的都要先new 对象,通过引用“.”的方式去访问。
      例如:
      public void doSome(){
          
      }
      

      注意:空指针异常(Nullpointerexception)出现的原因是空引用访问实例相关的数据。

      实例相关包括:成员对象+实例方法。

  • 3、封装步骤

    • 1.属性私有化

    • 2.一个属性对外提供公开的get和set方法作为操作入口,并且都不带static,都是实例方法。通过get方法获取,set方法修改,可以在set方法中设立关卡保证属性的合法。

      class Person{
          private String name;
          
          public int getNmae(){
              rerurn name;
          }
          public void setName(int xingming){
              name = xingming;
          }
      }
      
      public class Test{
          public static void main(String[] args){
              Person p = new Person();
              p.getName();
              p.setName("sefg123");
          }
      }
      
    • get方法格式:

      【修饰符】 返回值类型 get+属性名首字母大写(){

      ​ 返回值;

      }

    • set方法格式

      【修饰符】void set+属性名首字母大写(参数类型 参数名 ){

      ​ 实例变量 = 参数名;

      }

static

  • static

    1.静态

    • 所有static关键字修饰的都是类相关的,类级别的
    • 所有static 修饰的都是采用 类名. 的方式去访问。
    • static 修饰的变量:静态变量
    • static 修饰的方法:静态方法

    2.分类

    • 成员变量又分为

      • 实例变量
      • 静态变量
      class VarTest{
          int a;			//实例变量
          static int k;	//静态变量
          
          public void q(){
              
          }				//实例方法
          
          public static void w(){
              
          }				//静态方法
      }
      

      注意:静态的都是类相关的。

  • 2.什么时候声明实例变量,什么时候声明为静态变量?

    答:如果这个类型的对象的某个属性都是一样的,定义为静态的。

    一个对象一份,实例变量。所有对象一份,静态变量。

    • 1.只要是方法,无论是静态方法,实例方法,构造方法都会压栈。

      重点注意:加static 的变量叫做静态变量,静态变量在类加载时初始化,不需要 new 对象,静态变量的空间就开辟出来了。静态变量存储于方法区当中。

      局部变量:栈中

      实例变量:堆中

      静态变量:方法区中

    • 2.实例的:“引用.” 访问

    • 静态的:“类名.”访问,也可以“引用.”访问,建议使用 类名.访问

    class Chinese{
        Strind idCard;
        String name;
        static String country = "中国";
        
        public Chinese(String a;String b){
            idCard = a
            name = b;
        }
    }
    
    public class Test{
        public static void main(String[] args){
            Chinese c = new Chinese("qw12","张三");
            
            System.out.println(c.idCard);
            System.out.println(c.name);
            System.out.println(Chinese.country);
            
            /*
             或者System.out.println(c.country);
            */
        }
    }
    

    注意:空指针异常是指空引用访问实例相关数据。而空引用访问静态变量不会发生空引用异常。静态变量存储在方法区中,类加载时初始化。

  • 静态代码块

  • 1、语法:

    static{

    java语句1;

    java语句2;

    }

    • static 静态代码块在类加载时执行,并且只执行一次。
    • 注意:静态代码块在类加载时执行,并且在main之前执行。
  • 2、作用:

    • sun 公司为java程序员提供一个特殊的时机(类加载时机),可以用来记录日志
public class Test1{
    static{
        System.out.println("A");
    }
    static{
        System.out.println("b");
    }
        public static void main(String[] args){
        System.out.println("你好");    
        }
    static{
        System.out.println("c");
    }
}

方法

  • 1、方法什么时候定义为静态方法,什么时候定义为实例方法呢?

    答:方法都是描述了一个行为,如果该行为必须由对象触发就是实例方法。

    参考标准:

    当这个方法体中,直接访问了实例变量,这个方法一定是实例方法。

  • 实例代码块

    • 除了静态代码块,还有实例语句块。

    • 语法:

      {

      java 语句;

      java语句;

      }

      只要构造方法执行,必然在构造方法执行之前,自动执行实例语句块中的代码。其实也是sun公司为程序员提供的一个特殊时机,叫对象构建时机。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页