首页 > 代码库 > java学习笔记(一)
java学习笔记(一)
构造方法:构造方法是在编译的时候自动执行的,每产生一个新的对象,构造方法就会在该对象中执行一次,也就是说只有产生了新的实例才会执行构造方法。构造函数可用于初始化特定的值。构造方法的名字与所属的类的名字一致,无任何返回类型,void也不行,因为void其实就是返回null,只不过在代码中省略了return null;而已。构造方法可以被public、private等修饰(在被private修饰时可以参见单态设计模式)。如果类中没有定义构造函数那么默认构造函数为:
Public 类名()
{
}
当然可以同时定义多个构造函数,此时系统不再会默认定义前面所述构造函数,和名字相同的成员方法的区分一样,通过传递的形参类型、个数等在调用的时候自动区分,如下:
Class person
{
Int age;
String name;
Public person(int age)
{
This.age=age;
}
Public person(int age,String name)
{
This.age=age;//this(age);
This.name=name;
}
//public person()
//{}
Public static void main(String[] args)
{
Person s1=new person(“29”);
Person s2=new person(“56”,”luo”);
Person s3=new person();
}
}
上述代码有一处错误,编译将不能通过,创建s3实例时在类中找不到对应的构造函数,而此时系统又不会产生默认的构造函数,因此应该添加构造函数(将注释部分)。
This关键字:this关键字主要用于强调说明当前调用某属性或者方法的对象。一般在三种情况下必须使用this。第一种:如上述代码,在构造方法中为区分传递的形参与类的成员变量(名字相同,代码要注意易读性,一目了然)使用this关键字用于说明传递过来的参数赋给当前实例中的age、name。第二种:构造方法是不能直接被调用的,因为它是被编译器自动调用的,构造方法调用构造方法的时候,可以用this关键字,如上代码(注释部分)。第三种:向容器中添加部件时,指明添加的容器,如下代码:
Class container
{
Component comp;
Public void addcomponent(component comp)
{
comp=new component(this);
}
}
Class component
{
Public component(container c)
{
This.c=c;
}
}
Main函数:public static void main(String[] args)
Main函数标志着它所在的类作为程序启动类,即程序最先执行和分配内存,故不能调用非静态变量和非静态方法。因为main函数被虚拟机调用执行,所以为public而不能为private。String[] args在运行时(比如在虚拟机中编译时,在编译的类名字后面输入参数传递进去,以空格隔开)用来接收传进来的参数。
Static:静态变量与方法不是单独属于某个类,而是共有的,存储在方法区中,编译器会自动初始化。静态方法中不能调用非静态变量与非静态方法,因为非静态变量与方法是属于类的实例的,此时还不确定是否产生了实例,只有new了对象才能调用实例变量与方法。而静态变量与方法则可以直接通过类名调用也可以通过实例访问。从存储的角度来说,此时实例方法与变量还没有分配内存,故不能访问。
垃圾回收机制:存储在堆中的类及数组在没有被引用时即变成垃圾,默认情况下不会立马被清除,直到回收机制某个时刻(非人为控制的)开始清除才会清除掉,也可以使用system.gc()函数开始收集垃圾。在清除的前一刻系统会自动调用public void finalize()函数。可运行如下代码:
Class person
{
Public void finalize()
{
System.out.println(“rubbish is cleared”);
}
Void obj()
{
System.out.println(“everything is ready”);
}
Public static void main(String[] args)
{
New person();
New person();
New person();
System.gc();
}
}
静态代码块:在类被加载的时候静态代码块执行,并且只执行一次(尽管有多个类的实例对象)常用来对类属性进行初始化,形式如下:
Static
{
}
单态设计模式:针对某个类只能在其内部创建一个实例对象,即将构造方法用private修饰
Class china
{
Static china obj=new china();//此处static不能省,否则会不断地产生实例对象
Public static china getinstance()
{
Return obj;
}
Private china()
{
}
}
Class test
{
Public static void main(string[] args)
{
China a1=china.getinstance();//a1和a2其实是相同的
China a2=china.getinstance();
}
}
java学习笔记(一)