1.内部类
a)内部类直接访问外部类的成员
b)外部类要访问内部类,必须建立它的对象
c)一个文件中,外部类,只有一个修饰符为public,内部类不限制
d)直接访问外部类中的内部类的成员
e)内部类是静态的,成员也一定是静态的
f)内部类,访问外部类的成员变量
2.内部类局部的定义,只能访问被final修饰的局部变量
3.匿名内部类,必须继承或实现一个外部类或接口,其实就是子类对象
4.匿名内部类常用场景之一
当函数参数是接口类型时,而接口中方法不超过三个
可以用匿名内部类作为实际参数进行传递
5.内部类看作外部类的成员,可能是静态,也可能是非静态
6.实例化细节分析
分析:
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:加入到类路径汇总,并用名字调用
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:加入到类路径汇总,并用名字调用