zoukankan      html  css  js  c++  java
  • Java学习笔记8(面向对象一:概念、private)

    面向过程的思想:遇到问题,想,我该怎么解决这个问题?然后一步一步解决

    面向对象的思想:遇到一件事的时候,思考,我该让谁来做,至于他怎样去做,不是我需要考虑的事情,只要最后做好就行

    实际举例:我们要组装一台新电脑

    面向过程:我们上网查询各种硬件参数性价比,去商城观察询价,然后分析出最合适的,买好各种配件自己组装好

    面向对象:请一个懂组装电脑的专家,告诉他我要一台新电脑,他组装好之后给我

    面向对象的好处:

    1.更符合人们的思考习惯

    2.面向对象更像是一个指挥者,而面向过程像执行者

    3.面向对象的思维方式可以将复杂的问题简单化

    4.世界万物皆是对象

    举例:用类的方式,描述现实中的汽车

    定义汽车:

    public class Car {
        //定义颜色
        String color;
        //定义轮胎个数
        int count;
        //定义跑的功能
        public void run(){
            System.out.println(color+"色的"+count+"轮车在跑");
        }
    }

    运行汽车:

    public class CarTest {
    
        public static void main(String[] args) {
            Car c = new Car();
            c.color = "黑";
            c.count = 3;
            c.run();
        }
    }

    运行后:

    对象的内存分析:

    1.main方法进入栈中运行

    2.创建一个Car类,在堆内存开一片空间,存入这个新建的对象,类的成员变量跟随进入堆中,并赋予默认值(null,0)

    3.这个内存地址传给引用型变量c,即c指向内存中的这个对象

    4.c指向的内存中的变量color,count被修改

    5.方法run由对象c调用,进栈执行

    6.run方法执行完毕,释放栈内存

    7.main方法结束,释放栈内存

    8.c变量消失,堆内存中的对象被清除,释放内存

    类和对象的关系:

    类:对某一类事物的抽象描述

    对象:用于表示现实中该事物的个体

    类用于描述多个对象的共同特征,相当于一个模板

    对象是通过类创建出来的,一个类可以对应多个对象

    写在类中的变量是成员变量,写在类的方法中的变量是局部变量,区别:

    作用域

    成员变量:作用范围是整个类

    局部变量:作用于方法内或语句内

    默认值

    成员变量:有默认值(null,0,0.0)

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

    内存位置

    成员变量:跟随对象进入堆内存中进行存储

    局部变量:跟随自己的方法进入栈内存

    生命周期

    成员变量:跟随对象,储存在堆内存中,等待JVM清理,生命周期相对更长

    局部变量:跟随方法的,只要方法出栈,就不存在了,生命周期相对更短

    面向对象三大特征:封装,继承,多态

    封装表现:

    方法就是一个最基本的封装体

    类其实也是一个封装体

    封装的特点:

    1.提高了代码的复用性

    2.隐藏了实现细节,还要对外提供可以访问的方式,便于调用者的使用

    3.提高了安全性

    封装的现实举例:

    一台电脑机箱,里面有CPU,内存,硬盘等部件,如果散落在外边,会有很多不安全因素,因此把它们放在机箱里,并且提供各种插口供人们使用

    private关键字:

    定义一个类:

    public class Person {
        //人的姓名年龄,成员变量
        String name;
        int age;
        //说话功能
        public void speak() {
            System.out.println(age+"岁的"+name+"在说话");
        }
        
    }

    测试:

    public class PersonTest {
    
        public static void main(String[] args) {
            Person p = new Person();
            p.age = -200;
            p.name = "张三";
            p.speak();
        }
    
    }

    运行后:

    不合常理,于是我们想,如果不能修改age变量,这个问题就可以解决,于是有了private关键字

    被private修饰的成员,只能在自己的本类中使用

    可以对私有的成员,提供公共的访问方式:方法

    public class Person {
        // 人的姓名年龄,成员变量
        String name;
        private int age;
    
        // 定义方法,对age赋值
        public void setAge(int a) {
            if (a < 0 || a > 100) {
                age = 20;
            } else {
                age = a;
            }
        }
        
        //定义方法,获取age
        public int getAge(){
            return age;
        }
        
        // 说话功能
        public void speak() {
            System.out.println(age + "岁的" + name + "在说话");
        }
    
    }
    public class PersonTest {
    
        public static void main(String[] args) {
            Person p = new Person();
            p.setAge(80);
            System.out.println(p.getAge());
            p.name = "张三";
            p.speak();
        }
    
    }
  • 相关阅读:
    Codeforces Round #632 (Div. 2)
    Educational Codeforces Round 83 E. Array Shrinking
    Codeforces Round #626 D. Present
    I
    java学习-get和post请求
    java学习-MD5消息摘要算法
    分销系统数据库设计
    java获得当前日期是今年的第几周,以及这周的开始日期的方法
    分销系统的用户关系,用户与推广链接的数据库设计。设计思路
    git工具,conflict冲突解决方法
  • 原文地址:https://www.cnblogs.com/xuyiqing/p/8215404.html
Copyright © 2011-2022 走看看