Java基础知识2-类

什么是类?

        类在Java中处于核心地位。类定义了对象的外形和属性,它是一种逻辑结构,整个Java语言基于类而构建。
        理解类最重要的一点是,类定义了一种新的数据类型。一旦定义一个类,就可以使用这种新的类型创建该类型的对象。因此,类是对象的模板,对象是类的实例。
        在类中定义的数据或变量称为实例变量,代码包含在方法中。在类中定义的方法和变量都称为类的成员。在类中定义的变量之所以被称为实例变量,是因为类的每个实例(即类的每个对象)都包含这些变量的副本。

一个简单的类

public class Box {
    public double width;
    public double height;
    public double depth;
}

类定义了一种新的数据类型,在这个例子中,新的数据类型被称为Box。

注意:类的声明仅创建了一个模板,它没有创建实际的对象。

声明对象

Box myBox = new Box();
        上述代码是创建了一个对象,但是创建对象是分两步的。
        第一步:必须声明类类型的一个变量(Box myBox),这个变量没有定义对象,它只是一个引用对象的变量。
        第二步:使用new运算符。动态的(在运行时)为对象分配内存,并返回指向对象的引用。这个引用基本上是由new为该对象分配的内存地址。然后将这个引用存储在变量中。

注意:在Java中所有类对象都必须动态分配,也就是说想要一个对象就要new一个。

Box myBox;
myBox = new Box();

这种写法可能更清晰一点。

new 运算符

        new 运算符动态地为对象分配内存,这种方式的优点是,可以创建在程序运行期间所需要的人数数量的对象。
        可能有一个问题,为什么整数(int)或字符(char)这些类型不使用new关键字?
        答:Java的基本类型不是最为对象实现的,反而它们是作为“常规”变量实现的。这样做的目的是提高效率。由于为对象应用的开销与为基本类型应用的开销不同,因此Java可以更高效地实现基本类型。

为对象引用变量赋值

注意:当进行赋值是,对象引用变量的行为可能和您所期望的不同。
先看一段代码

Box b1 = new Box();
Box b2 = b1;

        你可能认为,b2被赋值为b1所引用对象的副本的引用,也就是说,你可能认为b1和b2引用的是相互独立的、不同的对象。但是这种想法是错误的,因为b1 和b2会引用同一个对象。将b1赋值给b2不会分配内存,也不会复制原始对象的任何部分,而只是简单的使用b2引用b1所引用的同一个对象。因此,通过b2对对象所做的任何修改,都会影响b1所引用的对象,因为它们本来就是同一个对象。图栗


java2-1.PNG

注意:当将一个对象引用变量赋值给另外一个对象引用变量时,不是创建对象的副本,而是创建引用的副本。

方法

类通常由两部分组成:实例变量(成员变量)和方法。

type name(parameter-list)
{
    //body of method
}

        type 指定了方法返回的数据类型,可以是任何有效的类型,包括创建的类类型。如果方法没有返回值,它的返回类型必须是void。如果返回类型不是void,使用return 语句为调用例程做返回。
        name 指定了方法的名称,可以是任何合法的标识符。
        parameter-list 是一系列由逗号隔开的类型和标识符对。参数在本质上是变量,当调用方法时,它们接收为方法传递的参数的值。如果方法没有参数,参数列表为空。

栗子1
    public void method1()
    {
        //此方法无返回值
    }
    
    public void method2(String str)
    {
        //此方法无返回值,并且有一个String类型参数
    }
栗子2
    public String method1()
    {
        //此方法有一个String类型的返回值
        return "";
    }
    
    public String method2(String str)
    {
        //此方法有一个String类型的返回值,并且有一个String类型参数
        return str;
    }

构造函数

        因为初始化需求非常普遍,所以Java允许在创建对象时初始化对象自身。这种自动初始化是通过构造函数实现的。
        构造函数在创建对象之后立即初始化对象。构造函数的名称和包含的类的名称相同,并且在语法上和方法类似。一旦定义构造函数,就会在创建对象之后、new运算符完成之前,立即自动调用构造函数。
        构造函数看起来有些奇怪,因为它没有返回值类型,也不返回void类型。构造函数的任务是初始化对象的内部状态。

public Box()
{
    //无参构造函数
}

this关键字

        有时,方法需要引用调用它的对象。为了能够进行这种操作,Java定义了this关键字。可以再任何方法中使用this引用当前对象。也就是说this代表当前对象。

    public Box()
    {
        //无参构造函数
        this.width = 10;
        this.height = 20;
        this.depth = 30;
    }

隐藏实例变量

        当局部变量和实力变量相同名称时,局部变量隐藏了实例变量。

public class Box {
    public double width;
    public double height;
    public double depth;
    
    public void method(double width)
    {
        System.out.print(width);
    }
}

        上面的例子只会输出参数列表传过来的值。因为参数列表中的变量名与实例变量中的变量名相同,程序会自动隐藏实例变量。如果想输出实例变量,那么就需要使用this关键字,例如System.out.print(this.width);

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

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,597评论 18 399
  • Win7下如何打开DOS控制台? a:开始--所有程序--附件--命令提示符 b:开始--搜索程序和文件--cmd...
    逍遥叹6阅读 1,589评论 4 12
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,783评论 1 10
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,635评论 0 11
  • 有一道选择题,在你的人生路上,你遇到了两个男人。一个风趣优雅万人迷,你们上床聊天共进晚餐都让你激情澎湃兴奋不已,缺...
    花花的樱花阅读 347评论 1 1