封装 1.面向对象有三大特征:封装、继承、多态 有时也会问面向对象四大特征:封装、继承、多态、抽象,其实抽象是面向对象程序设计的方法 2.封装定义: 在现实生活中,比如:包裹、书包、被罩...... 在java中,隐藏类的内部信息,不允许外部程序直接访问,而是通过方法(赋值方法和取值方法)完成,提高数据的安全性 3.封装操作步骤: 第一步:在实例变量前面添加private,表示私有的,也就是只能在当前类中使用 第二步:编写对应实例变量的方法(赋值方法和取值方法) 第一种情况:光标放在类中,按Alt + Insert键,选择第二项Getter,表示获取、得到,这里表示取值方法 注意:一般一个实例变量对应一个取值方法,取值方法名称为getXxx() 第二种情况:光标放在类中,按Alt + Insert键,选择第三项Setter,表示设置,这里表示赋值方法 注意:一般一个实例变量对应一个赋值方法,赋值方法名称为setXxx() 第三种情况:光标放在类中,按Alt + Insert键,选择第四项Getter and Setter,这表示取值方法和赋值方法 注意:一般一个实例变量对应一个取值方法get和一个赋值方法set 第三步:根据情况,适当的在赋值方法set中编写判断语句 比如:年龄要求在1---150岁为合法,否则年龄为18 性别只能是男或女,否则性别为女


package com.jian.demo6;

public class Student {
    //编写实例变量
    private String name;
    private int age;
    private char gender;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        //判断当前形参age的值是否在1---150岁范围内,否则实例变量age的值为18
        if(age >= 1 && age <= 150){
            this.age = age;
        }else{
            this.age = 18;
        }
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        //判断当前形参gender值是否是男或女,否则实例变量gender值为女
        if(gender == '男' || gender == '女'){
            this.gender = gender;
        }else{
            this.gender = '女';
        }
    }
}

测试类

package com.jian.demo6;

public class Test {
    public static void main(String[] args) {
        //创建学生对象
        Student s = new Student();
        //调用实例变量完成赋值
        //s.name = "李四";
        /*
            通过运行发现问题:
                当对性别和年龄赋值时,没有报错,但是值没有意义(值无效或者不合法)
                原因:性别只能是男或女,年龄没有为负数的
            解决办法:
                在赋值之前,先进行判断,如果合法则进行赋值,否则不赋值,则使用封装完成
         */
        /*s.gender = 'a';
        s.age = -3;
        //调用实例变量的值来输出
        System.out.println("姓名:" + s.name + "\n年龄:" + s.age + "\n性别:" + s.gender);*/
    }
 }
package com.jian.demo6;

public class Test2 {
    public static void main(String[] args) {
        //创建学生对象
        Student stu = new Student();
        //对实例变量赋值,则调用set方法
        stu.setName("小明");
        stu.setAge(-1);
        stu.setGender('a');

        //输出实例变量的值,则调用get方法
        System.out.println("姓名:" + stu.getName() + "\n年龄:" + stu.getAge() + "\n性别:" + stu.getGender());
    }
}


符串类型中的length方法,表示获取值的长度也就是个数


package com.jian.demo7;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        /*String s = "abc";
        //注意:在java中,获取字符串类型值的长度(个数),则使用length()方法完成
        System.out.println("输出s值的长度:" + s.length()); //3
        s = "Hello World";
        System.out.println("输出s值的长度:" + s.length()); //11
        s = "Hi,张三";
        System.out.println("输出s值的长度:" + s.length()); //5*/

        //练习:输入一个手机号,判断手机号的长度是否是11位
        //第一步:键盘输入一个手机号,存放在变量中
        Scanner input = new Scanner(System.in);
        System.out.println("请输入一个手机号:");
        String phone = input.next();
        //第二步:判断变量phone中的值是否是11位
        if(phone.length() == 11){
            System.out.println("是11位手机号");
        }else{
            System.out.println("不是11位的手机号");
        }
    }
}

输出年月日

package com.jian.demo1;

public class Date {
    //编写实例变量
    private int year;
    private int month;
    private int day;

    public int getYear() {
        return year;
    }

    public Date setYear(int year) {
        //判断形参year的值是否在0以上,如果在则赋值,否则实例变量的值为2020
        if(year > 0){
            this.year = year;
        }else{
            this.year = 2020;
        }
        return this; //总结:不管执行if还是执行else,最终都要将当期对象返回
    }

    public int getMonth() {
        return month;
    }

    public Date setMonth(int month) {
        //判断形参的月份值必须在1---12范围,则赋值,否则实例变量的值为10
        if(month >= 1 && month <= 12){
            this.month = month;
        }else{
            this.month = 10;
        }
        return this;
    }

    public int getDay() {
        return day;
    }

    public Date setDay(int day) {
        //判断形参day的值是否在1---31范围内,否则实例变量的值为27
        if(day >= 1 && day <= 31){
            this.day = day;
        }else{
            this.day = 27;
        }
        return this;
    }
}

测试类

package com.jian.demo1;

public class Test {
    public static void main(String[] args) {
        //创建日期对象
        Date date = new Date();
        //完成对实例变量赋值,则调用set方法完成
        /*date.setYear(2020);
        date.setMonth(6);
        date.setDay(15);*/
        /*
            其实上面三条语句,也可以编写为如下一条语句
            注意:当set方法返回当前对象时,在调用set方法时就可以进行连缀操作
         */
        date.setYear(2020).setMonth(6).setDay(15);
        //输出实例变量的值,则调用get方法完成
        System.out.println(date.getYear() + "年" + date.getMonth() + "月" + date.getDay() + "日");
    }
}