三大特性之一 封装

封装

一·封装的作用

public class Penguin{
    public int health;
}

Penguin p = new Penguin();
p.health = -1000;

因为以前传统的方式,允许外部直接访问本类中的信息(属性)!不安全!

二. 会使用封装

**封装:**将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。(把尽可能多的东西藏起来,对外提供便捷的接口<方法>)

封装实现步骤:

  1. 属性私有化(以前我们是public -> private 私有化之后 这个属性只能在本类中使用)
  2. 提供公共的(public)getter/setter方法
  3. 在对应的getter/setter方法中加入控制语句(根据需求去选择性的添加控制语句)
/**
 * 大象
 * @author Charles
 *
 */
public class Elephant {

	// 特征/属性/成员变量/字段
	/*public String name;
	public int age;
	public int health;
	public int love;*/
	// 1.私有化属性
	private String name;
	private int age;
	private int health;
	private int love;
	
	// 通过接口访问属性
	// 2.公共的getter/setter方法
	public void setHealth(int health) {
		// 3.加入控制语句
		if(health < 0 || health > 100) { 
			System.out.println("健康值非法!已经自动进行更正为60");
			this.health = 60;
		}
	}
	public int getHealth() {
		return health;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	//  ....
	/**
	 * 宠物自我介绍
	 */
	public void printPetInfo() {
		System.out.println("宠物自白:");
		System.out.println("姓名:"+name);
		System.out.println("年龄:"+age);
		System.out.println("健康值:"+health);
		System.out.println("亲密度:"+love);
	}
	
}

封装的优势:

  • 便于使用者正确使用系统,防止错误修改属性
  • 有助于系统之间的松耦合,提高系统独立性
  • 提高软件的可重用性
  • 降低了构建大型系统的风险

最好的系统架构是:高内聚、低(松)耦合。

三.会使用java中的包组织类

**出现的原因:**如果没有包!不方便查找、分类!而且不能出现同名类!

包的特点:

所有字母都小写!

规范:公司域名的倒序 + 项目名 +开发组名...。
// 声明包   它必须出现在类文件有效代码第一行
package cn.bdqn.demo4;
// 如果是java.lang包下的类不需要导包
import java.util.Scanner;

// 导包   必须出现在包声明下方   在类声明上方
// 可以导入具体的类   也可以批量导入 该包中所有内容  *   *号优先级比较低
import cn.bdqn.demo3.Student;

public class Test {

	public static void main(String[] args) {

		// 如果没导入包  默认去当前包中查找指定的类
		Student stu = new Student();
		// 如果在一个类中 使用了两个相同名的类  
		// 那么必然有一个是全类名/全限定名/全路径  的形式
		cn.bdqn.demo4.Student student = new cn.bdqn.demo4.Student();
		// Ctrl+Shift+O 全局导包  而且会自动去除没有使用的包
		Scanner input = new Scanner(System.in);
	}

}

扩展:

com.tencent.tim

com.taobao

com.neteasy.cloudmusic

安卓区分不同的程序:

1.依靠包来进行区分! 公司的域名倒序

2.签名(随机生成字符串)

四.掌握访问修饰符,理解访问权限

访问修饰符 \作用域本类中同包中子类中(继承)本项目任何位置
public(最开放)
protected(受保护的)
默认的(package/default)
private(私有的,最保守的)

五.static关键字

**static可以修饰变量:**静态变量/类变量

**static也可以修饰方法:**静态方法/类方法

**static也可以修饰代码块:**静态代码块

public class Dog {
	// 成员代码块/构造代码块/非静态代码块:会随着对象的创建而执行里面的代码片段(创建一次对象就执行一次) 它优先于构造方法执行
	{
		
	}
	
	// 静态代码块:会随着类的加载而执行里面的代码片段(只会执行一次)
	static {
		
	}
}

static修饰的类信息等和普通的成员(实例/对象)信息等的区别:

  1. 生命周期不同

    类信息随着类加载而创建

    实例信息随着对象产生而创建

  2. "作用域"不同

    类信息被该类的所有的对象共享,只要有一个对象更改,所有的对象获取的结果都会变化。

    实例信息仅仅被自身对象所使用,不同对象之间的实例信息相互独立存在。

  3. 调用上有所不同

    实例信息必须通过先创建对象,然后才能使用

    类信息,直接可以用类名.的形式调用(当然也可以用对象来调用)

注意事项:

  1. 如果在多个对象之间,有共享的数据,且这个数据不会发生变动,最好定义为静态常量,可以有效提升效率。
static final修饰...
  1. 在类信息中,如果使用实例信息,需要注意先创建对象才能使用。而反之则无所谓。(自己思考谁先出生和谁后出生)

static代码块随着类一起加载

1)如果有多个静态块,按顺序加载

2)每个静态代码块只会被执行一次

静态方法:可直接通过类名访问

​ 1)静态方法中不能使用this和super

​ 2)不能直接访问所属类的实例变量和实例方法

​ 3)可直接访问静态变量和静态方法

实例方法:通过实例访问

​ 可直接访问所属类的实例变量、实例方法、静态变量、静态方法

静态方法必须被实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值