类和对象


类“class”是Java语言的核心,Java的一切类型都是类,所有语句都必须位于类内,Java类库包含大量解决问题(字段),和行为(方法)。对象是基于类的具体实体,有时称为类的实例。

类和对象
类与对象的关系类似于车型设计和具体的车。车型设计(类)描述了该车型所具备的属性和功能,但车型的设计并不是具体的车,不能发动和驾驶。相应型号的车(对象),则是根据车型设计制造出的车(类的实例),他们都具备该车型设计所描述的属性和功能,可以发动和驾驶。
在这里插入图片描述

类的声明
声明一个类就是创建一个新的数据类型,而类在Java中属于引用数据类型。Java中使用关键字 class 来声明类,后面加上自定义的类名即可。如这里定义的person类,使用class person定义了一个person类,然后在person这个类的类体里面定义person这个类应该具有的成员变量(即属性)和方法,如这里定义的String name和int age这个两个成员变量,或者叫属性,这个name表示这个人的名字,人应该具有这个属性,age表示人的年龄,这也是人应该具有的。这样就在person这个类里面定义了两个人应该有的属性,接下来就是定义方法了。

每个类都要有构造方法,如果不写构造方法,系统会自动生成一个无参的构造方法。. 一般函数是用于定义对象应该具备的功能。而构造函数定义的是,对象在调用功能之前,在建立时,应该具备的一些内容。也就是对象的初始化内容。构造方法无返回值。

下面将实际操作,声明一个Person类,该类定义了两个数据成员(一个public ,一个Protected),一个不带参数的构造函数,一个带参数的构造函数。

/**
 * 描述:Person类
 *
 * @Author administrator{GINO ZHANG}
 * @Date2018/11/12
 */
public class Person {
    public String name;      //姓名(public)
    protected int age;       //年龄(protected)

    public Person(){         //不带参数的构造方法
        this.name = "未知";
        this.age = 0;
    }

    public Person(String name,int age){    //两个带参数的构造方法
        this.name = name;
        this.age = age;
    }

    public void print(){     //输出人员信息
        System.out.printf("name = %s,age = %d\n",this.name,this.age);
    }

    public static void main(String[] args) {
        Person p1 = new Person("jiaruo",3);
        Person p2 = new Person("pangzi",4);
        p1.print();
        p2.print();
    }
}

打印结果

C:\java\java7\jdk1.7.0_80\bin\java.exe -javaagent:D:\ideaIU-2018.1.5.win\lib\idea_rt.jar=30705:D:\ideaIU-2018.1.5.win\bin 
name = jiaruo,age = 3
name = pangzi,age = 4

Process finished with exit code 0

下面是在main方法里面调用person构造方法时的内存分析情况:

在这里插入图片描述

当方法调用完成之后,栈里面为它分配的空间全部都要消失,即把这个方法调用时分配给它的内存空间释放出来,所以这个构造方法person调用完成之后,栈内存里面分配的两小块内存_id和_age自动消失了。这样就把它们所占的空间让了出来,让其他的方法去占用。而new出来的对象则永远留在了堆内存里面。

类的成员

1.数据成员
数据成员用来描述该类的状态,包括字段和常量。数据成员可以是静态成员,与整个类有关;或是示例数据,类的每个实例都有自己的实例副本。
字段是与类相关的变量,常量是与类相关的常量。

2.函数成员
函数成员用于提供操作类中的数据中的某些功能,包括方法和构造方法。
方法时与某个类相关的函数,可以是实例方法,也可以是静态方法。实例方法用来处理类的某个实例,静态方法提供更一般的功能,不需要实例就能直接调用。
构造方法时与类名相同的方法,当类被实例时,首先执行的是构造方法。

3.静态成员和实例成员
类的成员,或是静态成员,或是实例成员。一般而言,静态成员属于类,又称类成员,被这个类的所有实例所共享;而实例成员属于对象(类的实例),每一一个对象都有实例成员的不同副本。当类成员声明中含有static修饰符,它声明为静态成员,否则为实例成员。
代码演示静态成员和实例成员的使用:

/**
 * 描述:静态成员和实例成员的使用演示
 *
 * @Author administrator{GINO ZHANG}
 * @Date2018/11/14
 */
class MainCounter{
    public int id;                               //实例字段
    public static int count  = 0;                //静态字段

    public MainCounter(int id){                  //构造方法
        this.id = id;
    }

    public void countup(){                       //实例方法
        count++;                     //正确:实例方法内可以直接使用静态字段
    }

    public void showInstance(){
        System.out.println("Object :"+id); //正确:实例方法可以直接引用实例字段

        System.out.println("count :"+count); //正确:实例方法内可以直接引用静态字段
    }

    public static void showStatic(){
        //System.out.println("Object:"+id);   错误:静态方法内不能直接引用实例
        System.out.println("count :"+count);   //正确:静态方法内可以直接使用静态字段
    }
}

public class Counter {
    public static void main(String[] args) {
        MainCounter m1 = new MainCounter(1);    //创建对象
        m1.countup();                              //对象可以调用实例方法
        m1.showInstance();                         //对象可以调用实例方法
        //m1.showStatic()                          //对象不可以调用静态方法

        System.out.println("Object :"+m1.id);      //对象可以调用实例字段
        //System.out.println("Object :"+MainCounter.id);  不能用类名调用实例字段
        //System.out.println("count :"+m1.count);   不能用对象名调用静态字段
        MainCounter.showStatic();                  //类名可以调用静态方法
        //MainCounter.showIntance();               类名不可以调用实例方法
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值