一.概念
将抽象的数据(属性)和数据的操作(方法)进行封装。
数据被保护在内部
其他部分通过授权(方法)去操作。
二.优点
1.隐藏实现细节
利用调用/传参---------各种方法
2.对数据进行验证(安全)(合理)
三.实现步骤
1.将属性私有化:不直接修改属性--通过main中实现
2.提供一个公共的(public)set方法
用于属性的判断/赋值
public void setxxx(类型 参数名){
xxx某一属性
判断/验证逻辑
赋值:属性=参数名
}
3.提供一个get方法 获取属性值
public void getxxx(类型 参数名){
return 羞xx;
}
public class PenguinTest {
public static void main(String[] args) {
//使用无参构造方法创建Penguin类对象
Penguin penguin = new Penguin();
//给penguin对象属性赋值
penguin.name= "QQ";
//给属性赋值,正常来说应该赋予一个有意义并且合理的值, 不能让你随便的赋值
penguin.health = -1000;
//我们需要对属性进行一个操作,让用户不能随意的去直接操作属性,而应该让
你间接的去操作,我们可以使用封装来实现这个保护
举例:
创建类和方法
package cn.bdqn.demo02;
public class Penguin {
private String name;
private int health;
private int love;
public Penguin() {
}
public Penguin(String name, int health, int love) {
this.setName(name);
this.health = health;
this.love = love;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//定义获取健康值的方法
public int getHealth(){
return health;
}
//定义设置健康值的方法
public void setHealth(int health){
//对你调用此方法传递过来的数据进行判断
if(health<0||health>100){
System.out.println("你输入的健康值不合理,默认给你的企鹅健康值赋值为80");
this.health=80;
}else{
this.health=health;
}
}
public int getLove() {
return love;
}
public void setLove(int love) {
this.love = love;
}
}
测试类对象
package cn.bdqn.demo02;
public class PenguinTest {
public static void main(String[] args) {
// 创建Penguin类对象
Penguin penguin = new Penguin();
penguin.setName("QQ");
System.out.println(penguin.getName());
// penguin.health = 90;
penguin.setHealth(-90);
int health =penguin.getHealth();
System.out.println("企鹅健康值:"+health);
penguin.setLove(90);
System.out.println(penguin.getLove());
double num =Math.random();
}
}
4.为什么需要包
6.包的作用
7. 包的创建
8.命名规范
9.导包
10. 使用包的注意事项
package cn.bdqn.demo04;
/*
* 一个Java文件中只能有一个public修饰的类,并且这个类的名称要和这个Java文件的名称保持一致
* 一个Java文件中除了public修饰的类之外,还可以定义0个或者多个默认修饰符(什么都不写)的类
* 注意:一般来说,一个Java文件中只定义一个类
*/
public class PublicClass {}
class Demo01{
}class Demo02{}
package cn.bdqn.demo04;
public class Test {
public static void main(String[] args) {
//在demo04包中的测试类(public修饰的)里创建demo04包中的public修饰的类
PublicClass pc = new PublicClass();
//在demo04包中的测试类(public修饰的)里创建demo4包中的默认修饰符修饰的类
DefaultClass dc = new DefaultClass();}
}
package cn.bdqn.demo04;
class Test2 {
public static void main(String[] args) {
//在demo04包中的测试类(使用默认修饰符修饰的类)里创建demo04包中使用public修饰的类
PublicClass pc = new PublicClass();
//在demo04包中的测试类(使用默认修饰符修饰的类)里创建demo04包中使用默认修饰符修饰的类
DefaultClass dc = new DefaultClass();
}}
举例:
package cn.bdqn.demo06;
public class Student {
//使用不同的访问权限修饰符定义属性
public String name;
protected int age;
String address;
private char gender;
public static void main(String[] args) {
//在本类中,上述不同修饰符修饰的属性能不能被直接访问
Student stu = new Student();
stu.name = "张三";
stu.age = 19;
stu.address = "安徽合肥";
stu.gender = '男';
}
}
package cn.bdqn.demo06;
public class Test {
public static void main(String[] args) {
// 创建Student类对象
Student stu = new Student();
stu.name = "王五";
stu.age = 22;
stu.address = "安徽芜湖";
// 同包中的其它类不能访问其它类中使用private修饰的属性
// stu.gender = '男';
}
11.类的访问修饰
类的访问修饰符
public修饰符:公有访问级别
默认修饰符:包级私有访问级别
12. 类成员的访问修饰
13.static修饰符
static可以用来修饰
成员变量
静态变量,可以直接通过类名访问
成员方法
静态方法,可以直接通过类名访问
代码块
静态代码块,当Java虚拟机加载类时,就会执行该代码块
14.static代码块
15.static变量
16.static方法