Java学习笔记 8 - 面向对象基础(类、变量、方法)

本文主要内容
1、类与对象
2、局部变量和成员变量
3、封装思想
4、关键字private,this

01面向对象和面向过程

a、面向对象的思想的生活案例
例如: 买电脑(组装机)
面向过程:自己该怎么做
面向对象:找人帮我们做
b、对象的内存关系

Java学习笔记 8 - 面向对象基础(类、变量、方法)_第1张图片
image.png

c、类和对象的关系
类和对象的关系:类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体
* 类,用于描述多个对象的共同特征,它是对象的模板。
* 对象,用于描述现实中的个体,它是类的实例。
* 类的定义:使用关键字class来定义java中的类
d、类的定义格式:
class 类名 {
//属性
数据类型 变量名;

//方法
修饰符 返回值类型 方法名(参数){ }

}

e、创建对象格式:类名 对象名 = new 类名();

02 成员变量和局部变量

定义的位置
* 成员变量 定义在类中
* 局部变量 定义在方法中或者{}语句中
在内存中的位置
* 成员变量 存储在对内存的对象中
* 局部变量 存储在栈内存的方法中
声明周期
* 成员变量随着对象的出现而出现在堆中,随着对象的消失而从堆中消失
* 局部变量随着方法的运行而出现在栈中,随着方法的弹栈而消失
初始化
* 成员变量因为在堆内存中,所有默认的初始化值
* 局部变量没有默认的初始化值,必须手动的给其赋值才可以使用。

03 方法参数类型

a、基本类型

    class Demo
    {
        public static void main(String[] args)
        {
            int x = 4;
            show(x);
            System.out.println("x="+x);
        }
        public static void show(int x)
        {
            x = 5;  
        }
    }    

基本类型作为参数传递时,其实就是将基本类型变量x空间中的值复制了一份传递给调用的方法show(),当在show()方法中x接受到了复制的值,再在show()方法中对x变量进行操作,这时只会影响到show中的x。当show方法执行完成,弹栈后,程序又回到main方法执行,main方法中的x值还是原来的值。
b、.引用类型

    class Demo 
    {
        int x ;
        public static void main(String[] args) 
        {
            Demo d = new Demo();
            d.x = 5;
            show(d);
            System.out.println("x="+d.x);
        }
        public static void show(Demo d)
        {
            d.x = 6;
        }
    }    

当引用变量作为参数传递时,这时其实是将引用变量空间中的内存地址(引用)复制了一份传递给了show方法的d引用变量。这时会有两个引用同时指向堆中的同一个对象。当执行show方法中的d.x=6时,会根据d所持有的引用找到堆中的对象,并将其x属性的值改为6.show方法弹栈。
由于是两个引用指向同一个对象,不管是哪一个引用改变了引用的所指向的对象的中的值,其他引用再次使用都是改变后的值。

c、结论
* 对于基本类型形式参数改变不会影响到实际参数
* 对于引用类型形式参数改变会影响到实际参数

04 封装

a、面向对象三大特征:封装、继承、多态
b、封装:把对象的属性与方法的实现细节隐藏,仅对外提供一些公共的访问方式
c、封装的体现:
* 变量:使用 private 修饰,这就是变量的封装
* 方法:也是一种封装,封装了多条代码
* 类: 也是一种封装,封装了多个方法
封装提高了代码的复用性、隐藏了实现细节,还要对外提供可以访问的方式。便于调用者的使用。
这是核心之一,也可以理解为就是封装的概念。同时提高了安全性

05 关键字

a、private关键字
* private可以修饰成员内容包括成员方法和成员变量
* private修饰的成员只能在当前类中访问,其他类中无法直接访问

b、this关键字
*本类对象的引用

  • this是在方法中使用的,哪个对象调用了该方法,那么,this就代表调用该方法的对象引用
  • 当创建对象的时候,this存在的
  • this的作用:用来区别同名的成员变量与局部变量(this.成员变量)
    public void setName(String name) {
    this.name = name;
    }


    Java学习笔记 8 - 面向对象基础(类、变量、方法)_第2张图片
    image.png
06 get和set方法

一般对成员属性的访问动作:赋值(设置 set),取值(获取 get),因此对私有的变量访问的方式可以提供对应的 setXxx或者getXxx的方法。

    class Person {
        // 私有成员变量
        private int age;
        private String name;
        // 对外提供设置成员变量的方法
        public void setAge(int a) {
            // 由于是设置成员变量的值,这里可以加入数据的验证
            if (a < 0 || a > 130) {
                System.out.println(a + "不符合年龄的数据范围");
                return;
            }
            age = a; 
        }
    
        // 对外提供访问成员变量的方法
        public void getAge() {
            return age;
        }
    }

    /*
     *   类描述人:
     *     属性: 姓名和年龄
     *     方法: 说话
     *   
     *   私有化所有的属性 (成员变量) ,必须写对应的get/set方法
     *   凡是自定义的类,自定义成员变量,应该私有化,提供get/set
     *   
     *   this关键字:
     *     区分成员变量和局部变量同名情况
     *     方法中,方位成员变量,写this.
     */
    public class Person {
        private String name;
        private int age;
    
        // set方法,变量name,age赋值
        public void setAge(int age) {
            this.age = age;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        // get方法,变量name,age获取值
        public int getAge() {
            return age;
        }
    
        public String getName() {
            return name;
        }
    
        public void speak() {
            String  name = "哈哈";
            int age = 16;
            
            System.out.println("人在说话  " + this.name + "..." + this.age);
        }
    }

你可能感兴趣的:(Java学习笔记 8 - 面向对象基础(类、变量、方法))