美文网首页我爱编程软件测试学习之路
Java学习笔记 8 - 面向对象基础(类、变量、方法)

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

作者: 乘风破浪的姐姐 | 来源:发表于2018-07-02 10:50 被阅读0次

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

    01面向对象和面向过程

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

    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;
      }


      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 - 面向对象基础(类、变量、方法)

        本文链接:https://www.haomeiwen.com/subject/wbwcuftx.html