06.封装的必要性

封装

  • 将类的某些信息隐藏在类的内部,不允许外部程序直接访问
  • 通过该类提供的方法来实现对隐藏信息的操作与访问
  • 隐藏对象的信息
  • 留出访问的接口

访问修饰符

default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。

private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

public : 对所有类可见。使用对象:类、接口、变量、方法

protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。

包管理

Java中一个包不能存在同名的类,可以在不同的包中定义两个同名的类。
每个包的功能信息尽量单一

导包

package com.jachie.Food;
import con.jachie.animal.*;	// 1.加载 con.jachie.animal 包下所有类
import con.jachie.animal.Cat;	// 2.加载 con.jachie.animal 包下指定的Cat类

public class Apple {

	public static void main(String[] args) {
		// 3.直接加载
		con.jachie.animal.CatTest catest = new con.jachie.animal.CatTest();	
	}

}

  • 建议采用`import 包名.类名; 进行加载,提高效率
  • 加载类的顺序与Import导入语句的顺序无关
  • import 包名.* ;此方式只能访问包名下的类,无法访问子包下的类
常用系统包
包名功能
java.lang包含Java语言基础的类,该包系统加载时默认导入。如:System、String、Math
java,util包含Java语言中常用的工具。如:Scanner、Random
java.io包含输入、输出相关功能的类。如File、InputStream

包的命名方法:

域名倒序 + 模块 + 功能
package必须放在Java源文件的第一行

package com.jachie.Food;	// 定义包

public class Apple {

}

static

通过static修饰的变量称为静态变量,同样修饰的方法称为静态方法,没有使用static修饰的变量和方法分别称为实例变量和实例方法。

静态变量

所有实例化的成员共享此变量的内存空间,因此变量值会统一。

声明周期

类加载时产生,销毁时释放,生命周期长

访问方式
对象.属性
类名.属性

静态方法

父类中的静态方法无法被子类重写
注意:而如果子类中存在于父类一模一样的完全相同的静态方法,子类中的静态方法会专属于子类调用,会互不干扰,编译器会在把另一个方法隐藏
父类

public class Animal {
	public static String info() {
		return "animal";
	}
}

子类

public class Cat{
	public static String info() {
		return "Cat";
	}
}

输出

	System.out.println(Cat.info());	// Cat
	System.out.println(Animal.info());	// Animal
访问方式
对象.方法()
类名.方法()

而静态方法无法直接访问同一个类中的非静态成员(方法、属性),只能直接调用同一个类中的静态成员,(只能通过对象实例化后,通过对象调用非静态陈成员);在静态方法里不能使用this

代码块

  • 普通代码块
  • 构造代码块
  • 静态代码块

普通代码块

顺序执行,先出现,先执行

构造代码块

创建对象时调用,优先于构造方法执行,在一个类当中可以有多个。

静态代码块

类加载时调用,优先于构造代码块执行

演示实例

NewPro

package com.jachie;

public class NewPro {

	public void  NewPro() {
		System.out.println("构造方法——顺序代码块");
	}
	
	
	{
		System.out.println("构造代码块");
	}	// 构造代码块
	
	static{
		System.out.println("静态代码块");
	}	// 静态代码块
}

Apple


package com.jachie.Food;

import com.jachie.NewPro;

public class Apple {

	public static void main(String[] args) {
		NewPro np = new NewPro();
		np.NewPro();
	}

}

输出

静态代码块
构造代码块
构造方法——顺序代码块

注意

静态代码块无论声明多少对象都执行一次
构造代码块声明一个对象执行一次
顺序代码块,调用一次执行一次
仅希望执行一次的程序就可以放到静态代码块里

练习

创建类Code,类中编写构造块、静态块以及构造方法
创建CodeBlock,类中编写构造块、静态块以及构造方法
在主函数中测试他们的执行顺序
要求显示效果如下

CodeBlock静态块
CodeBlock的主方法
产生Code的实例对象
CodeBlock静态块
CodeBlock构造块
CodeBlock构造方法
产生CodeBlock的实例对象
CodeBlock构造块
CodeBlock构造方法

...
...
答案在下方






























答案
Code

package com.jachie.stac;

public class Code {
	public Code() {
		System.out.println("CodeBlock构造方法");
	}
	{
		System.out.println("CodeBlock构造块");
	}
	static{
		System.out.println("CodeBlock静态块");
	}
	
}

CodeBlock


package com.jachie.stac;

public class CodeBlock {
	public CodeBlock() {
		System.out.println("CodeBlock构造方法");
	}
	{
		System.out.println("CodeBlock构造块");
	}
	static{
		System.out.println("CodeBlock静态块");
	}
	
	public static void main(String[] args) {
		
		System.out.println("CodeBlock的主方法");
		System.out.println("产生Code的实例对象");
		Code c = new Code();
		System.out.println("产生CodeBlock的实例对象");
		CodeBlock cb = new CodeBlock();
	}

}

```n 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空 白

停止的只会是自己,你得追逐世界

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值