美文网首页
Java基础学习(五)- 面向对象

Java基础学习(五)- 面向对象

作者: 做个合格的大厂程序员 | 来源:发表于2020-05-16 18:30 被阅读0次

    面向对象

    概念
    把一些特定功能的实现或者属性封装成一个类,这样结构就清晰了很多。在用的时候调用对应的类即可。

    特点

    • 是一种符合习惯的思想
    • 可以将复杂的事情简单化
    • 从执行者变成了指挥者

    定义一个类

    代码示例

    //定义一个学生类
    public class student{
            String name;
            int age;
    
            public void study(){
                System.out.println("学生学习");
            }
    
            public void eat(){
                System.out.println("学生吃饭");
            }
        }
    

    使用给一个类

    代码示例

    Student s = new Student();
    
    s.name = "张三";
    s.age = 18;
    s.eat();
    s.study();
    

    格式

    类名 对象名 = new 类名()

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

    • 在类中的位置不同
      • 成员变量:类中方法外
      • 局部变量:方法内或者方法声明上
    • 在内存中的位置不同
      • 成员变量:堆内存
      • 局部变量:栈内存
    • 声明周期不同
      • 成员变量:随着对象的存在而存在,随着对象的消失而消失
      • 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
    • 初始化值不同
      • 成员变量:有默认的初始化值
      • 局部变量:没有默认的初始化值,必须先定义,赋值,才能使用

    Private关键字

    定义

    • Private 关键字
      • 是一个权限修饰符
      • 可以修饰成员(成员变量和成员方法)
      • 被Private修饰的成员只能在类中才能访问
    • Private最常见的应用
      • 把成员变量用Private修饰
      • 提供对用的getXX() / setXX() 方法

    代码示例

    public class Student {
        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;
        }
    
        public void study(){
            System.out.println("学生要学习");
        }
    
        public void eat(){
            System.out.println("学生要吃饭");
        }
    }
    

    我们不推荐外部直接拿到成员变量的值进行修改,因为出于安全性考虑,比如年龄,如果我们在外部直接赋值为-30岁,显然不符合年龄的逻辑,所以我们应该在setAge方法中进行一定的校验,来保证数据的安全。例如:

    public void setAge(int age) {
            if (age >100 || age<0){
                System.out.println("输入数据不合法,请重新输入");
            }else{
                this.age = age;
            }
        }
    

    封装

    概述

    • 封装是面向对象的三大特征之一
    • 是面向对象编程语言客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改,就像年龄一样。

    原则

    • 将不需要对外提供的内容都隐藏起来
    • 把属性隐藏,提供公共方法对其访问

    好处

    • 通过方法来控制成员变量的操作,提高了代码的安全性
    • 把代码用方法进行封装,提高了代码的复用性

    构造方法

    构造方法就是在类中重写一个public 类的方法即可

    public class Student {
        public Student(){
                System.out.println("这是构造方法");
        }
    }
    

    标准类写法

    代码示例1

    public class Student {
        private String name;
        private int age;
    
    
        public Student(String name, int age) {
            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) {
            if (age >100 || age<0){
                System.out.println("输入数据不合法,请重新输入");
            }else{
                this.age = age;
            }
        }
    
        public void study(){
            System.out.println("学生要学习");
        }
    
        public void eat(){
            System.out.println("学生要吃饭");
        }
    }
    

    代码示例2

    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) {
            if (age >100 || age<0){
                System.out.println("输入数据不合法,请重新输入");
            }else{
                this.age = age;
            }
        }
    
        public void study(){
            System.out.println("学生要学习");
        }
    
        public void eat(){
            System.out.println("学生要吃饭");
        }
    

    上述的区别就是一个是使用系统默认的构造方法,一个是使用自定义的构造方法,除了在初始化类的时候不同,其他的使用都是一致的。

    相关文章

      网友评论

          本文标题:Java基础学习(五)- 面向对象

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