Java基础复习第七天——面向对象思想、类、对象、封装、构造方法、JavaBean

目录

一 面向对象思想

1.概述

2.面向对象的三大特征

         3.类和对象

4.类和对象的关系

5.类的定义

6.成员变量和局部变量

7.对象的使用格式

8.对象内存图

二.封装

1.封装的概述

2.封装的原则

3.封装的步骤

4.private关键字的作用

5.private的使用格式

6.this关键字(this和super下次整吧)

三.构造方法

a.什么是构造方法

b.构造方法的格式:

c.构造方法的重载

d.构造方法的注意事项

e.JavaBean类的定义******************************


一 面向对象思想

1.概述

   面向过程思想: 遇到一个问题,一步一步的去解决他,强调的是过程(典型代表语言是C语言)

   面向对象思想: 遇到一个问题,找一个可以解决问题的对象(可以是人,也可以是别的),强调是对象(典型代表语言Java)

 案例1: 洗衣服

      面向过程思想: a.收集衣服 b.加水洗衣液 c.泡一会 d.搓 e.漂洗 f.拧干 d.晾衣服

      面向对象思想: 1.找个全自动洗衣机,把衣服丢进去

                              2.找一个人,把衣服给他

2.面向对象的三大特征

     继承       ---复用

     封装       ---安全

     多态       ---拓展

3.类和对象

    Java中必须先有类,才能有对象

  类是什么?

          一群具有相同属性和行为事物的集合,比如人类,狗类,猫类

  对象又是什么?

          就是类中的一个具体存在,也称为实例。

  举例:

         车(类) 宝马车(类)  我家那辆三轮车(对象)

         动物(类) 狗(类) 大黄狗(类) 我家那只狗(对象)

4.类和对象的关系

        对象 是以 类 作为 模板 创建出来的

        所以类中有什么,那么对象就应该有什么(属性、方法)

5.类的定义

    类的定义:包括类名,类的属性(变量),类的行为(方法)三部分

 格式:

public class 类名{ //类名大驼峰

        //类的属性(成员变量)

       数据类型 成员变量名1;

       数据类型 成员变量名2;

        ...

       //类的行为(成员方法) 没有static关键字

     public 返回值类型 方法名(参数列表){

         方法体

       return 返回值;

    }

}

默认值问题:

    成员变量是有默认值的!!!!

6.成员变量和局部变量

    

成员变量:直接定义在类中的变量

局部变量:定义类中的方法中的变量

 

成员变量和局部变量的五点区别:

     a.定义位置不同

     b.初始值不同/默认值不同

            局部变量 没有默认值 ,不赋值不能使用

            成员变量 有默认值,不同的数据类型不同的默认值

    c.作用域不同(有效范围)

           局部变量 只能在局部使用,在哪个方法中定义的只能在该方法中使用

           成员变量 在该类中都可以使用

    d.内存位置

           局部变量 跟随方法的调用,进入栈中

           成员变量 跟随对象的创建,进入堆中

    e.生命周期

           局部变量 跟随方法的调用而出现,跟随方法的结束而销毁

           成员变量 跟随对象的创建而出现,跟随对象的销毁而销毁

7.对象的使用格式


类名 对象名 = new 类名();
对象名.成员变量;
对象名.成员方法();


public class Test01_Student {
  public static void main(String[] args) {
    //创建对象格式:类名 对象名 = new 类名();
    Student s = new Student();
    System.out.println("s:"+s); //地址
    //直接输出成员变量值
    System.out.println("姓名:"+s.name); //null
    System.out.println("年龄:"+s.age); //0
    System.out.println("‐‐‐‐‐‐‐‐‐‐");
    //给成员变量赋值
    s.name = "C罗";
    s.age = 18;
    //再次输出成员变量的值
    System.out.println("姓名:"+s.name); //C罗
    System.out.println("年龄:"+s.age); //18
    System.out.println("‐‐‐‐‐‐‐‐‐‐");
    //调用成员方法
    s.study(); 
    s.eat(); 
  }

8.对象内存图

1.单个对象调用方法

           在栈内存中运行的方法,遵循"先进后出,后进先出"的原则。变量p指向堆内存中的空间,寻找方法信息,去执行该方法。
但是,这里依然有问题存在。创建多个对象时,如果每个对象内部都保存一份方法信息,这就非常浪费内存了,因为所有对象的方法信息都是一样的。那么如何解决这个问题呢?

 2.多个对象调用方法

           对象调用方法时,根据对象中方法标记(地址值),去类中寻找方法信息。这样哪怕是多个对象,方法信息
只保存一份,节约内存空间

二.封装

1.封装的概述

      封装就是对我们写的对象的一种保护,防止数据被随意访问和修改

2.封装的原则

     a.把需要隐藏的属性 隐藏起来

     b.对外提供一种公共访问方式

3.封装的步骤

    a.java提供关键字,private 用来修饰成员变量

    b.提供一对get/set方法,通过该方法可以访问成员变量

4.private关键字的作用

     a.private是一种最小的权限修饰符

     b.能修饰成员变量和成员方法

     c.被private修饰的成员,只能在类的内部访问

5.private的使用格式

 格式: private 数据类型 成员变量名;


public class Dog{

private int age; //成员变量私有化了

//get方法,获取值,没有参数,有返回值

public int getAge(){

return age;

}

//set方法,修改值,没有返回值,有参数

public void setAge(int a){

age = a;

}

}

6.this关键字(this和super下次整吧)

public class Dog{
		private int age; //成员变量私有化了
		//get方法,获取值,没有参数,有返回值
		public int getAge(){
			return age;
		}
		//set方法,修改值,没有返回值,有参数
		public void setAge(int age){
			age = age; //如果这么写,就是局部变量自己给自己赋值了,这是java的就近原则
			this.age = age;//把局部变量age,赋值给成员变量this.age
		}
	}

tip: 1.idea生成get和set方法快捷键: alt+INS 点击 Getter and Setter

      2.eclipse 右键鼠标——Generate——getter and setter

三.构造方法

a.什么是构造方法

    给对象的成员变量默认值的方法

b.构造方法的格式:

      public 类名(){

      作用: 给成员变量赋默认值的

   }

  注意:构造方法没有返回值,不写返回值类型(不是void!!!!)

  注意:其实我们以前说的固定格式

           类名 对象名 = new 类名();//这里的类名() 其实就是调用了无参数构造方法

           类名 对象名 = new 类名(参数);//调用有参构造方法

c.构造方法的重载

重载的构造方法:

public class Dog{

private int age; //成员变量私有化了

private String name;//

//无参构造

public Dog(){



}

//重载构造

public Dog(int age){

this.age = age;

}

public Dog(String name){

this.name = name;

}

public Dog(int age,String name){

this.age = age;

this.name = name;

}

}

d.构造方法的注意事项

    i.如果一个类中没有写任何构造,那么默认有一个无参构造

    ii.如果我们写了构造,那么系统就不会生成无参构造

    iii.构造方法也可以重载

 

e.JavaBean类的定义******************************

  JavaBean是Java中定义类的标准

    i.所有成员变量必须私有化(private)

    ii.为私有化的成员变量提供Getter/Setter

    iii.标准的JavaBean中必须有无参构造

    iv. 标准的JavaBena中一般还会提供全参构造

  总结 JavaBean = private+get/set+无参构造+全参构造+(一般还会自己加toString()方法)

 

完整版JavaBean:

package com.gty.vip;


public class Person
{   
    //成员变量
    public  int age;
    public  String name;

    //无参构造方法
    public Person(){}

    //有参构造方法
    public Person(int age, String name){
        this.age=age;
        this.name=name;
    }

     //getset
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    //toString()方法,也是可以快速生成的   @Override是java的注解
    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }

   /*  主方法main()这里不写啊!!!因为没有main()方法,所以是不能运行的
       我们都是在别的类中调用的
   
     public static void main(String[] args) {
 
    }*/
}



猜你喜欢

转载自blog.csdn.net/weixin_41229776/article/details/84165267