字节码 是Java 编译之后的 的代码 是为了让JVM执行的 jar可以分为 可执行的 和不可执行的
java -jar Test 可以直接运行可执行的 jar包 那些不可执行的 你看的最多的 就是 像JRE这样的依赖包
类之间关系
使用,聚合,继承
class A
{}
class B extends A//继承 是的关系
{
A a;//聚合 有的关系
void a()
{
A a=new A();//使用 用的关系
}
}
class Student extends Human
{
}
Human h=new Student(); //引用变量(类型是Human类型) 访问对象唯一手段是引用
派生类继承父类所有属性
public 没有任何限制
private 局限类的内部
protected 同包和继承者课访问
包权限 同包内可访问
解决命名冲突?1. 延长命名
2.分成几部分局部范围内
无名包 不用导入
一个源文件public 类只能有一个 源文件名字与类名相同
一个类的父类只能有一个
protected 受保护的成员,只能通过子类实例访问,不能通过父类实例来访问
final 等同于c++中constant
final int i=0;
对象常量一般小写,简单数据类型是大写final 类不能被继承(断子绝孙)
重载,函数名相同,参数(类型,数量)不同
覆盖,子类中出现与父类相同的函数(函数名和函数参数相同)
构造函数1.
2.一个类的构造函数里可以调用super(…)来实现父类构造函数class Point()
{
int x,y;
{}//初始化代码
static
{}//静态初始化代码,当类被加载时被执行
Point(int x,int y){
this.x=x;
this.y=y;
}
Point(int x)
{
this.(x,0);
}
Point()
{
this.(0,0);
}
}
初始化顺序:
父类初始化 初始化变量 初始化代码 构造函数class A
{
public A()
{
System.out.println(“p”)
this.init();
}
public void init()
{
System.out.println(“q”);
}
}
class B extends A
{
int i=4;
B(int i)
{
System.out.println(“s”);
this.i=i;
}
public void init()
{
System.out.println(i)
}
public static void mian(String[] args)
{
B b=new B(5);
}
}
p 0 s
一个类调用本类函数特别危险,因为父类函数有可能被覆盖对象引用放在堆栈但对象是放在堆中
基本类型直接存储值在堆栈中
boolean数值类型所占存储空间大小没有明确指定
BigInteger支持任意精度的整数
BigDecimal支持任何精度的定点数
c和c++的数组就是内存块 如果一个程序要访问自身内存块之外的数组,或在数组初始化前使用,后果难以预料
java确保数组就会被初始化,而且不能在它的范围外被访问
作用域决定了在其内存内定义的变量名的可见性和生命周期
c和c++中将一个较大作用域的变量隐藏的做法,在java中不允许
java垃圾回收器用来监视new创建的所有对象
如果字段是某个对象的引用,必须初始化该引用
基本成员如果没初始化默认赋值