封装 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() + "日");
}
}