【建议收藏】关于面向对象、封装,尚未见过总结的这么详细的!

类和对象

什么是类

类是一组相关属性和行为的集合,能够看做是一类事物的模板,好比说:不管中年人、老年人仍是小孩,都有身高、体重(这是属性),都会吃饭、睡觉(这是行为),那么咱们就能够抽取出这些共有的属性和行为,封装为一个类。类由两部分组成:java

  • 属性:事物的状态信息
  • 行为:事物可以作啥

什么是对象

对象是某类事物的具体体现,对象是类的一个实例,好比说:一株蒲公英是植物类的具体实例。this

对象和类的关系

  • 类是对象的抽象
  • 对象是类的具体

类的定义

格式

修饰符 class关键字 类名{
    //成员变量(属性)
    //成员方法(行为)
}

定义类

public class Student{
    String name;//姓名
    int age;//年龄

    //吃饭
    public void eat(){
        System.out.println("吃饭");
    }
}

Student是类名,name和age是成员变量(属性),定义的方式和声明普通变量同样;eat是成员方法(行为)。spa

建立和使用对象

格式

类名 对象名=new 类名();
public static void main(String[] args){
    //建立Student类实例
    Student s=new Student();
    //使用成员变量
    System.out.println(s.name);//null
    System.out.println(s.age);//0
    //调用eat方法
    s.eat();
}

成员变量的默认值

若是没有对成员变量进行赋值的话,那么将会使用它们的默认值code

public class Student {
    int age;
    float weight;
    char sex;
    boolean isMan;
    String name;

    public void eat(){
        System.out.println("吃饭");
    }

    public static void main(String[] args) {
        Student s=new Student();
        System.out.println(s.age);//0
        System.out.println(s.weight);//0.0
        System.out.println(s.isMan);//false
        System.out.println(s.name);//null
        System.out.println(s.sex=='\u0000');//true
    }
}

局部变量

局部变量在方法内部定义对象

public class Student {
    int age;

    public void say(){
          //定义局部变量a
        int a=1;
        System.out.println(a);
    }
      //形参也是局部变量
      public void hel(int a){
      System.out.println(a);
    }
}

成员变量和局部变量的区别

  • 在类中的位置不一样

    成员变量定义在类中、方法外blog

    局部变量定义在方法中或方法声明上(形参)接口

  • 做用范围不一样生命周期

    成员变量做用范围是整个类内存

    局部变量的做用范围是它所在的方法rem

    public class Student {
        int age;
    
        public void say(){
              //定义局部变量a
            int a=1;
            System.out.println(age);
            System.out.println(a);
        }
    
        public void hel(){
            System.out.println(age);
            //System.out.println(a);  没法访问到a
        }
    
    }
  • 是否有默认值

    成员变量有默认值

    局部变量没有默认值,必须定义赋值,而后使用

    public void say(){
            int a;
            //System.out.println(a);  未赋值没法使用
        }
  • 在内存的位置

    成员变量在堆内存

    局部变量在栈内存

  • 生命周期不一样

    成员变量随着对象的建立而存在,随着对象的消失而消失

    局部变量随着方法的调用而存在,方法调用完毕它便消失

封装概述

封装是指将数据和操做数据的方法绑定起来,对数据的访问只能经过定义的接口。咱们在类中编写的方法就是对实现细节的一种封装;咱们编写的类就是对数据和数据操做的封装。

封装步骤

  • 使用private修饰符将变量修饰为私有变量(只有本类中能够访问)
  • 对外提供公有的能够访问私有变量的方法,如getXXX()方法和setXXX()方法

    public class Test1 {
        public static void main(String[] args) {
            Person p=new Person();
            //System.out.println(p.name);  没法直接访问
            System.out.println(p.getName());//null 只能经过对外提供的接口进行访问
        }
    }
    
    class Person{
        private String name;
        private int age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }

    注意

    一个.java文件中能够定义多个类,可是只能有一个类使用public修饰符

    this关键字表明正在操做的那个对象,this.name表示该对象的成员变量name,区别于局部变量name

构造方法

咱们知道,想要使用对象内的东西,必需要先使用new关键字建立对象,那么它是怎么建立出来的呢?答案就是构造方法,但是咱们的类中没有定义构造方法啊?虽然没有定义,可是咱们每一个类都有一个默认值的无参构造方法,咱们在new对象的时候就会调用构造方法。那么咱们该如何定义本身的构造方法呢?

#### 格式

【修饰符】 类名(【参数列表】){
    //代码
  }

#### 注意点

    • 构造方法的名字必须和类名一致
    • 构造方法没有返回值(实际上是省略了,由于构造方法只能返回本类的类型)
    • 一旦本身DIY了构造方法,那么默认的无参构造方法就无效了
    • 没有参数列表的是无参构造方法,有参数列表的是有参构造方法
    • 咱们能够在一个类中定义多个构造方法

      public class Test1 {
             public static void main(String[] args) {
                //使用无参构造建立对象
                 Person p1=new Person();
                 //使用有参构造建立对象
                 Person p2=new Person("张三");
             }
         }
      
         class Person{
             private String name;
             private int age;
      
             //无参构造方法
             public Person(){
                 System.out.println("我是无参构造方法");
             }
      
             //我是有参构造方法
             public Person(String name){
                 System.out.println(name);
                 System.out.println("我是有参构造方法");
             }
      
         }
    执行结果:

    我是无参构造方法
    张三
    我是有参构造方法

    #### 使用构造实现封装

    前面经过编写setXXX方法和getXXX方法以及私有化成员变量实现封装,这里咱们经过构造方法实现封装

    class Person{
           private String name;
           private int age;
    
           //无参构造方法
           public Person(){
               System.out.println("我是无参构造方法");
           }
    
           //我是有参构造方法
           public Person(String name,int age){
               System.out.println("我是有参构造");
               this.name=name;
               this.age=age;
           }
       }
       public class Test1 {
           public static void main(String[] args) {
              //使用无参构造建立对象
               Person p1=new Person();
               //使用有参构造建立对象
               Person p2=new Person("张三",23);
           }
       }

    咱们没法访问对象的成员变量(属性),只能经过构造进行访问

    JavaBean

    JavaBean是java语言编写类的一种标准规范,符合JavaBean`的类必需要知足如下条件:

    • 类必须是具体和公开的(使用public修饰)

      • 类必须有无参构造方法(有参构造建议加上)
    • 必需要有操做成员变量的setXXX方法和getXXX方法

      class Person{
             private String name;
             private int age;
      
             //无参构造方法
             public Person(){
                 System.out.println("我是无参构造方法");
             }
      
             //我是有参构造方法
             public Person(String name,int age){
                 System.out.println("我是有参构造");
                 this.name=name;
                 this.age=age;
             }
      
             public String getName() {
                 return name;
             }
      
             public void setName(String name) {
                 this.name = name;
             }
      
             public int getAge() {
                 return age;
             }
      
             public void setAge(int age) {
                 this.age = age;
             }
         }

    最后

    感谢你看到这里,文章有什么不足还请指正,以为文章对你有帮助的话记得给我点个赞,天天都会分享java相关技术文章或行业资讯,欢迎你们关注和转发文章!