(笔记五)内部类、匿名类、包

1.内部类
a)内部类直接访问外部类的成员
b)外部类要访问内部类,必须建立它的对象
c)一个文件中,外部类,只有一个修饰符为public,内部类不限制
d)直接访问外部类中的内部类的成员
class Outer
{
	class Inner
	{
	
	}
}
Outer.Inner in=new Outer().new Inner();

e)内部类是静态的,成员也一定是静态的
class Outer
{
	static class Inner
	{
		
	}
}
Outer.Inner in= new Outer.Inner();

f)内部类,访问外部类的成员变量
class Outer
{
	int num=1;
	class Inner
	{
		int num=2;
		void show()
		{
			int num=3;
			System.out.println(num);	//3
			System.out.println(this.num);//2
			System.out.println(Outer.this.num);//1
		}
	}
}

2.内部类局部的定义,只能访问被final修饰的局部变量
class Outer
{
	void method()
	{
		final int x=1;	//常量
		 class Inner
		 {
			void show()
			{
				 System.out.println(x);	
			}
		 }
		 Inner in=new Inner();
	}
}

3.匿名内部类,必须继承或实现一个外部类或接口,其实就是子类对象
abstract class Demo
{
	abstract void show();
}

class Outer
{
	/* 正常的继承
	class Inner extends Demo
	{
		void show()
		{
			
		}
	}
	*/
	public void method()
	{
		new Demo()	//Demo表示一个子类,简写上面
		{
			void show()
			{
				
			}
		}.show();		//引用调用
		Demo d=new Demo()
		{
			void show()
			{
			}
		}
		d.show();		//调用		
	}
}

4.匿名内部类常用场景之一
当函数参数是接口类型时,而接口中方法不超过三个
可以用匿名内部类作为实际参数进行传递
class Demo
{
	public static void main(String[] args)
	{
		show(new Inter()
		{
			public void show1(){}
			public void show2(){}
		});
	}
	//@param inter为接口
	public static void show(Inter in)
	{
		in.show1();
		in.show2();
	}
}

5.内部类看作外部类的成员,可能是静态,也可能是非静态

6.实例化细节分析
public class Demo
{
	public static void main(String[] args)
	{
			new Zi();
	}
}
class Fu
{
	Fu()
	{
		show();
	}
	void show()
	{
		System.out.println("Fu");
	}
}
class Zi extends Fu
{
	int num=1;
	{
		System.out.println("block ...");	//构造代码块
	}
	Zi()
	{
		//隐藏super()调用
		System.out.println("Zi constructor ..."+num);
	}
	void show()
	{
		System.out.println(num);
	}
}
/*结果
0 
Zi constructor ... 1
*/

分析:
step1:new在内存堆中分配空间(包括父类和子类的成员)
step2:调用子类构造函数时,判断是否有基类,若有先调用基类构造函数
step3:构造函数初始化成员变量前,先执行类的初始化
step4:构造代码块
step4::执行构造函数
和c#有区别

7.参见视频10-18-面向对象(对象的初始化过程)

8.包
为了更好地组织类,Java提供了包机制。包是类的容器,用于分隔类名空间。
a)定义包,在源文件头部package 包名;
编译:javac -d .  文件名.java   当前位置生成文件夹,并生成类
调用:通过包名,访问包的类
b)同一个包中
public:完全公开
默认修饰符的类成员,其它类可以访问;
private只能本类或内部类访问;
protected 子类可访问父类成员

c)不同的包中
默认修饰符类、类成员,不能访问;
protected:一个包的类继承另一个包中的类,可以直接访问protected的成员,但通过创建对象访问,编译错误;
d)private不能对类修饰

9.包的导入
package mypack;  当前包名

import packa.DemoA; //导入packa包中的DemoA类
import packa.*; //导入packa包下所有类,不包括子包
import packa.abc.*; //导入packa.abc包下所有类

10.JAR
JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。为 J2EE 应用程序创建的 JAR 文件是 EAR 文件(企业 JAR 文件)。

JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用来指示工具如何处理特定的 JAR。

a)特点:
安全性(对 JAR 文件内容加上数字化签名)
减少下载时间、压缩
传输平台扩展:Java扩展框架提供了向Java核心平台添加功能的方法,这些扩展使用JAR文件打包的。
包密封、包版本控制、可移植性

 b)运行
 可执行的JAR:一个自包含的Java应用程序,直接由JVM执行;
 非可执行JAR:加入到类路径汇总,并用名字调用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值