JAVA面向对象--易错小结
一、使用对象
(1)对象操作自己的变量(对象的属性)
(2)对象调用类中的方法(对象的功能)
二、匿名对象
只使用一次的对象,称为匿名对象。
匿名对象只在堆内存中开辟空间,而不存在栈内存的引用。
public static void main(String args[ ])
{
new Person("Tom", 18).shout( ); // 匿名对象
}
三、this关键字
1. 引用当前对象的成员变量。 格式:this.成员变量名;
2.在构造方法中使用this 代表使用该构造方法所创建的对象。
3.在实例方法中使用this 代表使用该方法的当前对象。 格式:this.方法名。
以上情况均可省略this。
必须使用“this”的场合
(1)区分成员变量和局部变量
成员变量在整个类内有效,局部变量仅在方法内有效。在方法体中声明的变量以及方法的参数是局部变量,方法的参数在整个方法内有效,方法内定义的局部变量从它定义的位置之后开始有效。
如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,需要在成员变量之前加上this.。
(2)在一个构造方法里调用其他重载的构造方法
此外,若要在一个构造方法里调用其他重载的构造方法,不是用构造方法名,而是用this(参数列表)的形式,而且必须是第一条语句。
public class Person
{
String name;
int age;
Person(String name)
{
this.name = name;
}
Person(String name , int age)
{
this(name);
this.age = age;
}
}
四、static 关键字
用关键字static修饰的成员变量称作静态变量或类变量,而没有使用static修饰的成员变量称作实例变量。例如,下述A类中,x是实例变量,而y是类变量。
class A
{
float x;
static int y;
}
无论是否产生了对象或无论产生了多少对象的情况下,类变量在内存空间里只有一份
五、静态代码块
在程序中无论多少实力对象,静态代码块都只被执行一次,静态块经常用来进行类变量的初始化。
当一个程序中用到了其他的类,类是在第一次被使用的时候才被装载,而不是在程序启动时就装载程序中所有可能要用到的类
静态代码块优先于主方法执行,在类中定义的静态代码块会优先于构造块。
class StaticCode{
static String country;
{
System.out.println("aaa");
}
static
{
country = "China";
System.out.println("bbb");
}
StaticCode( ) {
System.out.println("ccc.");
}
}
class TestStaticCode{
static
{
System.out.println("ddd");
}
public static void main(String[ ] args){
new StaticCode( );
new StaticCode( );
}
}
输出的结果
ddd
bbb
aaa
ccc
aaa
ccc
可以看到静态代码块指执行一次,且静态代码块优先于主方法执行,在类中定义的静态代码块会优先于构造块