coreJava_3——类和对象

类和对象

定义类

类和对象(object,也被称为实例,instance),类是抽象的,用来模拟现实事物,可理解为某种概念,而“对象”是类的具体实例。对象是具体的,根据类的描述创造出来的。

对于一个类定义,可以包含三个最常见的成员:构造器、成员变量、方法。类里各成员之间的定义顺序无影响,各成员之间可以相互调用,注意:static修饰的成员不能访问没有static修饰的成员

成员变量用于定义该类或该类的实例所包含的状态数据;
方法用于定义该类或该类的实例的行为特征或者功能实现;
构造器用于构造该类的实例,java通过new关键字来调用构造器,从而返回该类的实例。构造器是一个类创建对象的根本途径,如果一个类没有构造器,这个类将无法创建实例。因此java默认为一个类提供无参构造器,但是如果程序员手动提供了构造器,系统将不再为该类提供默认构造器。

定义成员变量的格式:

[修饰符] 类型 成员变量名 [=默认值];

注:

  • 修饰符可以省略,也可以是public、protected、private、static、final,其中public、protected、private只能用其中一个,可以与static、final组合用
    定义

定义方法的格式:

[修饰符] 方法返回类型 方法名(形参列表){
        //方法体
}

注:

  • 修饰符可以省略,也可以是public、protected、private、static、final,其中public、protected、private只能用其中一个,可以与static、final组合用
  • 如果声明了返回类型,方法体中必须有一个有效的return语句,该语句返回一个变量或一个表达式,且类型需要与声明的返回类型一致;
    果果没有返回类型,需要使用void声明
    定义构造器:
[修饰符] 构造器名(形参列表){
        //构造器执行体
}

注:

  • 修饰符:可以省略,也可以是public、protected、private之一
  • 构造器名:必须和类名相同
  • 形参列表:和定义方法的形参列表要求一样
  • 构造器不能定义返回值类型,也不能使用void声明没有返回值,否则Java会把构造器当成方法来处理,就不再是构造器了。
    实际上,构造器是有返回值的,当使用new关键字来掉用构造器时,构造器返回该类的实例。可以把这个类的实例当成构造器的返回值,因此构造器的返回值总是当前类,无须定义返回值类型。注意:无需显式地使用return来返回当前类的对象,构造器的返回值时隐式的

对象的产生和使用

先创建一个Person类,Person.java

public class Person {
    //定义两个成员变量
    public String name;
    public int age;
    //定义一个say方法
    public void say(String content) {
        System.out.println(content);
    }
}

PersonTest.java

//使用Person类定义一个Person类型的变量
Person p;
//通过new调用Person类的构造器,返回一个Person实例
//将该实例赋给p变量
p = new Person();
//也可以简写成
//Person p = new Person();

注:new Person()这里的括号指的是调用构造器,形参为无参。
类名 对象名=new 类名();
类名 对象名: 这个的解释是创建名称为“对象名”的“类名”类
new :这个的解释是实例化对象
类名() :这个的解释是无参数构造方法;
new 类名(),就是说以无参数构造方法实例化对象;
类名 对象名=new 类名():用指针的解释就是以无参数构造方法实例化对象并将这个对象的内存引 用赋给“类名”类的“对象名”[引用变量]`

创建对象后可以使用了,主要有:

  • 访问对象的实例变量
  • 调用对象的方法(调用时必须为形参赋值)
    注意:static修饰的方法和成员变量,通过类和实例可以调用;没有static修饰,只能通过实例调用

对象、引用和指针

Person p = new Person();
这行代码产生了两部分,p变量,Person对象。在内存中,Person类型的变量实际上是一个引用,存在栈内存中,指向实际的Person;真正的Person对象存在堆内存中。
当一个对象被创建成功后,存放在堆内存中,java不允许直接访问堆内存中的对象,只能通过该对象的引用操作该对象。Java里的引用相当于c里的指针,只是Java把指针进行了封装,避免开发者进行繁琐的指针操作。
堆内存里的对象可以有多个引用,即多个引用指向同一个对象。

//将p变量的值赋值给p2变量。这样p2、p均指向同一个对象
Person p2 = p;

对象的this引用

this关键字总是指向调用该方法的对象。根据this出现位置的不同,this作为对象的默认引用,有两种情形:

  • 构造器中引用该构造器正在初始化的对象
  • 在方法中引用调用该方法的对象
    this关键字最大的作用是,让类中一个方法,访问该类的另一个方法或实例变量。
    示例:Dog.java
public class Dog {
    public void jump() {
        System.out.println("正在执行jump方法");
    }
    //run方法需要借助jump方法
    public void run() {
        //使用this引用调用run方法对象
        //this可以省略
        this.jump();
        System.out.println("正在执行run方法");
    }
}

其他对象的一个方法依赖另一个方法的案例,如吃饭方法依赖使用筷子等,java允许对象的一个成员直接调用另一个成员,也可以省略this前缀。
但是对于static修饰的方法而言,可以使用类来直接调用,如果使用this关键字,则无法指向合适的对象。即:静态成员不能直接访问非静态成员。
`注意:这里要联合思考。static是允许用类名和对象调用的,但实际上不应该允许这样做。在编程中注意不要使用对象实例调用static修饰的成员变量、方法等,而应该使用类

3、创建实例
public static void main(String[] args) {
Teacher gzhu = new Teacher("George Zhu", 30, 10000);
System.out.println("Teacher: " + gzhu.getName());
System.out.println("\tAge: " + gzhu.getAge());
System.out.println("\tSalary: " + gzhu.getSalary());
}

main()方法是Java应用程序的入口点,每个Java应用程序都是从main()方法开始运行的。作为程序入口的main()方法必须同时符合以下几个条件:
. 用public static修饰;
. 返回类型为void;
. 方法名为main;
. 参数类型为String[];
包含main方法的类又叫主程序类。

类创建好之后,通过new关键字创建具体对象。它有以下作用:
. 为对象分配内存空间,将对象的实例变量自动初始化为其变量类型的默认值;
. 如实例变量显示初始化,将初始化值赋给实例变量;
. 调用构造方法;
. 返回对象的引用;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容