封装特点
把类的属性隐藏,提供公共方法对其访问
提高了代码的复用性和的安全性
学生实例
使用类的封装原则创建学生类;
成员变量包括ID、姓名、年龄、性别;
对所有成员变量进行封装。
public class T1 {
private String ID;//学号
private String name;//姓名
private int age;//年龄
private String sex;//性别
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
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 String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
public class test {
public static void main(String[] srgs) {
T1 zhangsan = new T1();
zhangsan.setID("1001");
System.out.println(zhangsan.getID());
zhangsan.setName("张三");
System.out.println(zhangsan.getName());
zhangsan.setAge(15);
System.out.println(zhangsan.getAge());
zhangsan.setSex("男");
System.out.println(zhangsan.getSex());
}
}
运行结果:
构造方法
构造方法又称为构造器,构造方法没有返回值类型,实例化类的对象的时候,优先执行构造方法。
构造方法分别是有参数的构造器和无参数的构造器。
静态代码块,只执行一次
构造代码块,执行顺序在静态代码块和构造方法之间
普通代码块,调用时执行
快递员实例
属性: 姓名,员工编号,员工工资;
方法: 输入及输出员工信息
public class Courier {
private String name;//姓名
private String id;//员工编号
private double salary;//员工工资
//无参构造方法
public Courier() {
this.id="0001";
this.name="张三";
this.salary=1111;
}
//有参构造方法
public Courier(String id,String name,Double salary) {
this.id=id;
this.name=name;
this.salary=salary;
}
public void setName(String name) {
this.name=name;
}
public String getName() {
return this.name;
}
public void setId(String id) {
this.id=id;
}
public String getId() {
return this.id;
}
public void setSalary(double salary) {
this.salary=salary;
}
public double getSalary() {
return this.salary;
}
}
package test1;
public class TestCourier {
public static void main(String[] args) {
//无参构造
Courier zhangsan = new Courier();
zhangsan.setName("张三");
zhangsan.setId("123456");
zhangsan.setSalary(1230);
System.out.println(zhangsan.getName());
System.out.println(zhangsan.getId());
System.out.println(zhangsan.getSalary());
//有参构造
Courier lisi=new Courier("12345","马云", 1111.3);
System.out.println(lisi.getName());
System.out.println(lisi.getId());
System.out.println(lisi.getSalary());
}
}
运行结果:
张老太养猫的实例
张老太养了两只猫:一只叫小花,今年3岁白色。另一只叫小白,今年3岁花色。请 编写一个程序,当用户输入小猫的名字时,就显示该猫的名字、年龄、颜色。如果输入的小猫名错误,则显示:张老太没有这只猫。
public class Cat {
static {
System.out.println("静态代码块,只执行一次");
}
private String name;//猫的姓名
private int age;//年龄
private String color;//颜色
public Cat(String name,int age,String color) {
System.out.println("有参的构造方法");
this.name=name;
this.age=age;
this.color=color;
}
{
System.out.println("构造代码块,执行顺序在静态代码块和构造方法之间");
}
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 String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
public class TestCat {
public static void main(String[] args) {
Cat xiaobai = new Cat("小白", 3, "花色");
Cat xiaohua = new Cat("小花", 3, "白色");
System.out.println("请输入猫的姓名:");
Scanner scanner=new Scanner(System.in);
String name = scanner.next();
//判断是不是小花
if((name).equals(xiaohua.getName())) {
System.out.println("猫的名字为:"+xiaohua.getName());
System.out.println("猫的年龄为:"+xiaohua.getAge());
System.out.println("猫的颜色为:"+xiaohua.getColor());
}
//判断是不是小白
else if((name).equals(xiaobai.getName())) {
System.out.println("猫的名字为:"+xiaobai.getName());
System.out.println("猫的年龄为:"+xiaobai.getAge());
System.out.println("猫的颜色为:"+xiaobai.getColor());
}
else {
System.out.println("张老太没有这只猫");
}
}
}
public class TestStatic {
public static void main(String[] args) {
{
System.out.println("普通代码块,调用时执行");
}
Cat c1=new Cat(null, 0, null);
//Cat c2=new Cat(null, 0, null);
}
}
运行结果:
静态成员变量 、静态方法
静态方法: 用static关键字声明的方法。在静态方法中,不可以使用非静态的成员
静态成员变量: 用static关键字声明的成员变量。是该类的公用变量,在第一次使用时被初始化
静态变量 / 方法的调用: 可以通过类名访问,而无需实例化
调用静态变量/方法 实例
public class Book {
public static String title="三国演义";//静态变量
//静态方法
public static void showBookInfo() {
System.out.println(title);
}
}
public class TestBook {
public static void main(String[] args) {
System.out.println(Book.title);//调用静态变量
Book.showBookInfo();//调用静态方法
}
}
运行结果:
对象数组
类型为对象的数组
动态对象数组
Student stu1 = new Student(“张三”,“男”);
Student stu2 = new Student(“张三”,“男”);
Student stu3 = new Student(“张三”,“男”);
Student[] student = new Student[3];//动态对象数组
student[0] = stu1;
student[1] = stu2;
student[2] = stu3;
静态对象数组
Student[] student = {stu1,stu2,stu3};//静态对象数组
套餐实例
属性: 套餐名称,价格,有效期,剩余流量;
方法:
- 输入套餐名称,展示套餐内容;
- 输入要使用的流量,看套餐够不够;
- 在输入使用天数,判断是否能够使用。
package test6;
public class Taocan {
private String name;//套餐名称
private double price;//价格
private double time;//有效期
private double liuliang;//剩余流量
public Taocan(String name,double price,double time,double liuliang) {
this.name=name;
this.price=price;
this.time=time;
this.liuliang=liuliang;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public double getTime() {
return time;
}
public void setTime(double time) {
this.time = time;
}
public double getLiuliang() {
return liuliang;
}
public void setLiuliang(double liuliang) {
this.liuliang = liuliang;
}
}
/**
*测试类
**/
public class TestTaocan {
public static void main(String[] args) {
Taocan taocan1 = new Taocan("网虫", 50, 20, 1024);
Taocan taocan2 = new Taocan("超人", 40, 10, 1000);
Taocan taocan3 = new Taocan("话痨", 30, 5, 500);
Taocan[] tc = new Taocan[3];//动态对象数组
tc[0] = taocan1;
tc[1] = taocan2;
tc[2] = taocan3;
// Taocan[] tc1= {taocan1,taocan2,taocan3};//静态对象数组
System.out.println("请输入套餐名称:");
Scanner scanner = new Scanner(System.in);
String name = scanner.next();//套餐名称
int m = 0;//未查询到套餐名称的次数
for(int i=0;i<tc.length;i++) {
if(name.equals(tc[i].getName())) {
System.out.println("套餐名称为:"+tc[i].getName());
System.out.print("价格为:"+tc[i].getPrice());
System.out.print("\t有效期为:"+tc[i].getTime());
System.out.println("\t剩余流量为:"+tc[i].getLiuliang());
System.out.println("请输入要使用的流量:");
double liuliang = scanner.nextDouble();
if(liuliang <= tc[i].getLiuliang()) {
System.out.println("套餐流量满足您的需求。");
System.out.println("请输入要使用的时间:");
double time = scanner.nextDouble();
if(time <= tc[i].getTime()) {
System.out.println("套餐使用时间满足您的需求。");
}
else {
System.out.println("该套餐不满足您的需求,请选择其他套餐!!");
}
}
else {
System.out.println("该套餐不满足您的需求,请选择其他套餐!!");
}
}
else {
m++;
}
}
if(m==3) {
System.out.println("输入错误,请重新输入!!!");
}
}
}
运行结果:
描述狗的实例
设定属性包括:品种,年龄,心情,名字;
方法包括:叫(心情好),跑(心情不好)
要求:
1、设置属性的私有访问权限,通过公有的get,set方法实现对属性的访问
2、限定心情只能有“心情好”和“心情不好”两种情况,如果无效输入进行提示,默认设置“心情好”。
3、设置构造函数实现对属性赋值
4、叫和跑的方法,需要根据心情好坏,描述不同的行为方式。
5、编写测试类,测试狗类的对象及相关方法(测试数据信息自定义)
public class Dog {
private String kind;//品种
private int age;//年龄
private String mood;//心情
private String name;//名字
public Dog(String name,int age,String kind,String mood) {
this.name = name;
this.age = age;
this.kind = kind;
this.mood = mood;
}
public String getKind() {
return kind;
}
public void setKind(String kind) {
this.kind = kind;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getMood() {
return mood;
}
public void setMood(String mood) {
this.mood = mood;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Call {
public void call(Dog d) {
if(!("心情不好").equals(d.getMood()) && !("心情好").equals(d.getMood())) {
System.out.println("一只"+"叫"+d.getName()+"\t"+d.getAge()+"岁的"+d.getKind()+"心情好");
System.out.println("无效输入");
System.out.println("狗狗:叫");
}
else if(("心情好").equals(d.getMood())) {
System.out.println("一只"+"叫"+d.getName()+"\t"+d.getAge()+"岁的"+d.getKind()+"心情好");
System.out.println("狗狗:叫");
}
}
}
public class Run {
public void run(Dog d) {
if(("心情不好").equals(d.getMood())) {
System.out.println("一只"+"叫"+d.getName()+"\t"+d.getAge()+"岁的"+d.getKind()+"心情不好");
System.out.println("狗狗:跑");
}
}
}
public class TestDog {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入狗狗的心情状态:");
String mood = scanner.next();//输入心情
Dog dog = new Dog("二哈", 5, "哈士奇",mood);
Call call = new Call();
call.call(dog);
Run run = new Run();
run.run(dog);
}
}
运行结果:
描述卡车信息的实例
属性:车牌号、车型、颜色、日租金、载重量
方法:租赁
要求:
1、设置属性的私有访问权限,通过公有的get,set方法实现对属性的访问
2、租赁方法通过输入参数,接收租车人姓名和租赁时间,描述租赁状态,要求判断租赁时间的有效性。
3、设计构造函数实现属性赋值
4、编写测试类,测试卡车类的对象及相关方法(测试数据信息自定义)
public class Car {
private String id;//车牌号
private String kind;//车型
private String color;//颜色
private double money;//日租金
private double weight;//载重量
public Car(String id,String kind,String color,double money,double weight) {
this.id = id;
this.kind = kind;
this.color = color;
this.money = money;
this.weight = weight;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getKind() {
return kind;
}
public void setKind(String kind) {
this.kind = kind;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
}
public class Person {
private String name;//姓名
private double time;//时间
public Person(String name,double time) {
this.name = name;
this.time = time;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getTime() {
return time;
}
public void setTime(double time) {
this.time = time;
}
}
public class TestCar {
public static void main(String[] args) {
System.out.println("**欢迎进入出租公司车辆管理系统**");
System.out.println("请输入租车人姓名和租赁时间(天):");
Scanner scanner = new Scanner(System.in);
String name = scanner.next();
double time = scanner.nextDouble();
Car car = new Car("蒙C00000","SUV", "黑色", 1000, 100);
Person person = new Person(name, time);
//最多租用10天
if(person.getTime() <= 10){
System.out.println(person.getName()+"已租贷"+person.getTime()+"天");
System.out.println("未到租贷时间");
System.out.println("您租用的车牌号为"+car.getId());
System.out.println("您租用的车型为"+car.getKind());
System.out.println("您租用的颜色为"+car.getColor());
System.out.println("您租用的日租金为"+car.getMoney()+"元");
System.out.println("您租用的载重量为"+car.getWeight()+"kg");
}
else {
System.out.println(person.getName()+"已租贷"+person.getTime()+"天");
System.out.println("您的租贷时间过,请及时还车");
}
}
}
运行结果:
描述IT从业者的实例
设定属性包括:姓名,年龄,技术方向,工作年限;
要求:
1、设置属性的私有访问权限,通过公有的get,set方法实现对属性的访问
2、限定IT从业人员必须年满15岁,无效信息需提示,并设置默认年龄为15。
3、工作方法通过输入参数,接收工作单位和职务,输出个人工作信息
4、编写测试类,测试IT从业者类的对象及相关方法(测试数据信息自定义)
public class Worker {
private String name;//姓名
private int age;//年龄
private String direction;//技术方向
private double time;//工作年限
public Worker(String name,int age,String direction,double time) {
this.name = name;
this.age = age;
this.direction = direction;
this.time = time;
}
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 String getDirection() {
return direction;
}
public void setDirection(String direction) {
this.direction = direction;
}
public double getTime() {
return time;
}
public void setTime(double time) {
this.time = time;
}
}
public class TestWorker {
public static void main(String[] args) {
System.out.println("请输入该员工的年龄:");
Scanner scanner = new Scanner(System.in);
int age = scanner.nextInt();
Worker worker = new Worker("张三", age, "java开发", 3);
if(worker.getAge() < 15) {
System.out.println("无效信息");
System.out.println(worker.getName()+"\t15岁\t"+worker.getDirection()+"\t"+"年限"+worker.getTime()+"年");
}
else {
System.out.println(worker.getName()+"\t"+worker.getAge()+"岁\t"+worker.getDirection()+"\t"+"年限"+worker.getTime()+"年");
}
}
}
运行结果: