类属性的使用
声明方法:【修饰符】 属性类型 属性名 【=默认值】
详细说明:
(1)修饰符:可省略,三个访问控制符public、protected和private只能使用其中的一个,但是static和final可以同时使用
(2)属性类型:没啥说的,就是普通的基本类型以及引用类型(类,接口,数组)
(3)属性名:只要是一个合法的标识符就可以
下面就是一个实例:
public class usingAttribute {
static String str1 = "String1";
static String str2;
String str3 = "String3";
String str4;
//static语句块用于初始化static成员变量,是最先运行的语句块
static {
printStatic("before static");
str2 = "String2";
printStatic("after static");
}
//输出静态成员变量
public static void printStatic(String title){
System.out.println("-----" + title + "-----");
System.out.println("str1 = \"" +str1 + "\"");
System.out.println("str2 = \"" +str2 + "\"");
}
//打印一次属性,然后改变d属性,最后再一次打印
public usingAttribute(){
print("before constructor");
str4 = "str4";
print("after constructor");
}
//打印所有的属性
public void print(String title){
System.out.println("-----" + title + "-----");
System.out.println("str1 = \"" + str1 + "\"");
System.out.println("str2 = \"" + str2 + "\"");
System.out.println("str3 = \"" + str3 + "\"");
System.out.println("str4 = \"" + str4 + "\"");
}
public static void main(String[] args) {
System.out.println();
System.out.println("----------创建usingAttribute对象----------");
System.out.println();
new usingAttribute();
}
}
输出结果:
-----before static-----
str1 = "String1"
str2 = "null"
-----after static-----
str1 = "String1"
str2 = "String2"
----------创建usingAttribute对象----------
-----before constructor-----
str1 = "String1"
str2 = "String2"
str3 = "String3"
str4 = "null"
-----after constructor-----
str1 = "String1"
str2 = "String2"
str3 = "String3"
str4 = "str4"
注意:
被static修饰的变量称之为类变量,他们被类的实例共享。也就是说,某一个类的实例改变其中一个静态值,其他这个类的实例也会收到影响。而成员变量没有被static修饰,所以为实例私有,也就是说,每个类实例都会有一个自己的专属成员变量,只有当前实例才能改变其值。
对象的声明与使用
声明方法:
类名 对象名 = new 类名();
对象只有通过实例化之后才能够被使用,实例化的关键字就是new
实例化:Person p = new Person();
p就是对象名,实例化之后也就相当于实例对象
对象的使用:
对象名称.属性名
对象名称.方法名()
匿名对象
匿名对象就是没有名字的对象。对象真正有用的部分位于堆内存里面,而栈内存只是保存了一个对象的引用名称,所以所谓的匿名对象就是指,只开辟堆内存空间而没有栈内存指向的对象。
例如:
public class NoNameObject{
public void say(){
System.out.println("面朝大海,春暖花开");
}
public static void main(String[] args){
new NoNameObject().say();
}
}
需要注意,匿名对象没有栈内存,所以只能使用一次,之后便会被垃圾回收器回收