类对象,实例对象傻傻分不清

类属性的使用

声明方法:【修饰符】 属性类型 属性名 【=默认值】
详细说明:
(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();
	}
}

需要注意,匿名对象没有栈内存,所以只能使用一次,之后便会被垃圾回收器回收

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值