path:bin 指令集
pathclass:.class文件路径
public class和class 声明的区别:
!!!如果一个类声明的时候使用了 public class声明,则类名称必须与文件名完全一致。如果使用class声明的话,文件名称可以与文件名不一致,
但是执行的是生成后的类名称。(!javac 文件名 java 类名称)
构造方法:
当使用关键字new 的时候才会调用构造方法。
匿名对象:只使用一次的对象,用完之后就成垃圾
对象的产生格式:
声明对象:类名称 对象名称 =null,//在栈内存中开辟一段新的空间如果直 接使用此对象,会出现空间指向异常
实例化对象:对象名称 =new 类名称();//开辟对应的堆内存空间,保存所有的属性内容,这样才可以直接使用
被封装的属性:setter,getter 命名要求:第一个单词首字母小写,之后的每个单词的首字母大写。
this:
所有的构造方法应该是对象操作前最先调用的,所以使用this调用构造方法的时候所有代码必须放在构造方法的首行。
在使用this调用一个构造方法的时候至少有一个构造方法是没有使用this()调用的, 而此构造方法将作为调用的出口,一般这个出口都会使用无参构造完成。
static的方法只能调用static的属性或方法,不能调用非static的属性或方法。但反过来可以。主方法上也存在static关键字,public static void main(String args[])------
public :表示最大权限,所有人都可以访问。
static:执行的时候执行的是类名称所以可以表示由类名称直接调用
void:因为主方法是一切的起点所以表示没有返回值,
main:系统内建的方法名称
String args[]:字符串数组,用于接收参数,想输入完整的字符串,eg:"hello world"要用“"”双引号括起来
JAVA里面的main函数为什么要定义为static的?
main函数其实也是所在类的一个方法,就比如一个类是test,那么该类的main其实就是test.main(String[] args),众所周知如果一个方法不是静态的,则要先实例化该类,比如要这样 test t=new test();
然后才能调用 test.main();
而这对于运行一个程序的主函数来说是不现实的,所以比如把main函数定义为static,使test.main()可以直接被调用。
ByteArrayOutputstream new出来的时候 自动在内存中建了一个字节数组
transient 透明的
serilizable 可序列化的
单例设计 构造方法前加private 私有化 当整个系统只需要一个实例化对象的时候就使用此设计模式 实现核心:一个类中必须有构造方法,如果将构造方法私有化之后,那么外部将无法实例化对象
内部类:唯一好处:可以外部类的私有成员
外部类.内部类 内部类对象=外部类实例.new 内部类实例
一个内部类如果使用static声明的话,则此内部类将成为外部类。可以直接通过
外部类.内部类的形式访问。
@静态内部类:内部类可以声明为static的,静态内部类被提升为顶层类,换句话说,静态
内部类是定义在类内部一个“外部”类,可以在外部类中用内部类名来直接生成静态内部类
对象,可以定义自己静态或非静态成员。静态内部类不能访问包含它的外部类的非静态成员
@。
***内部类可以在任意地方使用,例如:在方法中声明(本地内部类)。这时,内部类的作用范围局限在包含它的语句块或方法。
匿名内部类:
public class inner {
public static void main(String a[]){
inner e=new inner();
e.method(new Test(){
void action (){System.out.println("inner。action()!!");}
});
}
void method(Test t){
t.action();
}
}
class Test{
void action(){System.out.println("Test.action()!!");}
}
//本例中,方法method()有个类型为Test的参数,在main()方法中,调用method()方法时,直接传入一个新的Test实例,同时对这个类进行重写。
//这个新的Text实例实际上是Test类的子类,这个子类没有名字,因称为匿名类。
一般情况下,如果一个内部类不是被定义成静态内部类,那么在定义成员变量或者成员方法
的时候,是不能够被定义成静态成员变量与静态成员方法的。也就是说,在非静态内部类中
不可以声明静态成员。
在静态内部类中,可以定义静态的方法(也只有在静态的内部类中可以定义静态的方法),在静态方法中引用外部类的成员。但是无论在内部类的什么地方引用,有一个共同点,即都只能够引用外部类中的静态成员方法或者成员变量。对于那些非静态的成员变量与成员方法,在静态内部类中是无法访问的。这就是静态内部类的最大使用限制。在普通的非静态内部类中是没有这个限制的
-------静态内部类可以创建静态的成员而非静态的内部类不可以
-------静态内部类只可以访问外部类中的静态成员变量与成员方法而非静态的内部类既可以访问静态的也可以访问非静态的外部类成员方法与成员变量 这两个差异是静态内部类与非静态外部类最大的差异,也是静态内部类之所以存在的原因。了解了这个差异之后,程序开发人员还需要知道,在什么情况下该使用静态内部类。如在程序测试的时候,为了避免在各个Java源文件中书写主方法的代码,可以将主方法写入到静态内部类中,以减少代码的书写量,让代码更加的简洁。
java普通类里可以有静态成员
public class Out {
//java普通类里可以有静态成员,但非静态的内部类不可以
static int i=1;
int a=1;
static void outterstaticMethod(){
System.out.println("outterStaticMethod()");
}
//静态内部
static class inner{
//静态的 内部类可以定义自己静态或非静态成员,非静态内部类的不可以自己定义静态的成员
static void innerAction11111111(){}//静态内部类可以创建静态的成员而非静态的内部类不可以
void innerAction(){
//调用外部类的静态方法
outterstaticMethod();
//调用外部类的静态变量
System.out.println("i="+i);
//静态内部类 不可以 调用外部类的 非静态成员 Cannot make a static reference to the non-static field a
//System.out.println("a="+a);
}
}
public static void main(String args[]){
//可以直接用内部类创建静态内部类对象
inner in=new Out.inner();
in.innerAction();
}
}
//总结:
//静态的 内部类可以定义自己静态或非静态成员, 不可以 调用外部类的 非静态成员
//非静态的内部类既可以访问静态的也可以访问非静态的外部类成员方法与成员变量,不可以自己定义静态的成员