成员权限
本类 同包类 非同包子类 非同包非子类
public y y y y
protected y y y
default y y
private y
在类中定义的变量,在创建对象时,会自动对类中的变量进行初使化,对如int类的会被初使化为0。
在方法中定义的变量,不会被初使化。
peason p1=new peason p1();
peason p2=p1;
p1=null;
此时p1为空,变为垃圾,peason对象还被p2所引用.
==和equals的区别:==用于比较两个变量的值是否相等(用于基本数据类型,equals用于比两个对象中的内容是否完全一样)
对于String s1=new String("abc"); 和 String s2=new String("abc");这两条语句,用if (s1==s2) , s1和s2是不等的,因为s1和s2是两个对象,所以不等; 但String s3=s1;
用if (s1==s3),则结果是相等的,因为s1和s3指向堆中的同一个对象,他们在栈中的值是一样的。
equals用于比较两个对象中的内容是否相等,if (s1.equals(s2)) ,则结果相等
数组间的考备函数 System.arraycopy()
数组间的排序 arrays.sort()
数组的比较也可用equals()
--------------------------------
***********匿名对象
可以 new 类名().方法名(); new peason().shout();直接创建一个对象,调用方法.(匿名对象)
匿名对象的两种情况:1.如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
2.将匿名对象作为实参传递给一个函数调用,比如程序中有一个getSomeOne函数,要接收一个Person类对象作为参数,函数定义如下;
public static void getSomeone(Person p)
{.......}
可以用下面的语句调用这个函数
getSomeOne(new Person());
----------------------------
*********构造函数
构造方法的特征:
1.它具有与类相同的名称
2.它不含返回值
3.它不能在方法中用return语句返回一个值
注意:在构造方法里不含返回值的概念是不同于void的,在定义构造方法时加了void,结果这个方法就不再被自动调用了
在构造函数中,通过this可以调用同一class中别的构造函数,如
public class Flower{
Flower (int petals){}
Flower(String ss){}
Flower(int petals, Sting ss){
//petals++;调用另一个构造函数的语句必须在最起始的位置
this(petals);
//this(ss);会产生错误,因为在一个构造函数中只能调用一个构造函数
}
}
**:1)在构造调用另一个构造函数,调用动作必须置于最起始的位置
2)不能在构造函数以外的任何函数内调用构造函数
3)在一个构造函数内只能调用一个构造函数
------------------------------------------
this用法1
class Person ()
{ private int age;
private String name=new String();
public Person(){}
public Person( String x)
{ name=x;}
public Person( String x,int y)
{ name=x; age=y;}
public void fun1();
{ System.out.println(name) }
public void fun2();
{ Person a2=new Person("a2");
a2.fun1();
this.fun1(); // a1.fun1 this代表对fun2进行调用的对象,fun2运行时是一定有一个对象存在的,这里的this是可以省略的,直接用fun1()
}
//this就相当于我所在的那个对象
public static void main(String [] args)
{ Person a1=new Person("a1");
a1.fun2();
}
}
this用法2
class Person ()
{ private int age;
private String name=new String();
public Person(){}
public Person( String x)
{ name=x;}
public Person( String x,int y)
{ name=x; age=y;}
}
改为
class Person ()
{ private int age;
private String name=new String();
public Person(){}
public Person( String name)
{ this.name=name;}
public Person( String name,int age)
{ this.name=name; this.age=age;}
}
this用法3:用构造方法去调用另一个构造方法
class Person ()
{ private int age;
private String name=new String();
public Person(){}
public Person( String name)
{ this.name=name;}
public Person( String name,int age)
{ this(); // 调用Person()构造孔方法
this(name); //调用Person(String name)构造方法
this.age=age;}
}
---------------------------------------
finalize 析构方法,垃圾回收器 用法 public void finalize(){...}
System.gc() 当在主函数中调用时,启动地垃圾回收finalize(){...}
每个类中都有一个垃圾回收器
Classs A{
...
...
public void finalize()
{ System.out.println("object is going!"); }
public static void main(String[] args)
{ new A();
new A();
new A();
System.gc(); //启动垃圾回收
}
}
运行结果:object is going!
object is going!
object is going!