2.1  创建新的数据类型:类

通过第一章掌握了面向对象的理论后,我们知道每个对象必定属于一个类型,那么Java如何创建新的数据类型?如下程序所示:

class Circle {
    // 属性
    // 方法
}

如上所示,使用关键字class定义了类Circle,用花括号{ }将整个类包括起来。当然,这个类还不能做任何事,它还需要定义一些属性和方法。

2.2  属性和方法

面向对象的一个特性就是将数据和方法结合起来。比如对一个圆抽象,可见圆有它的属性半径,它还有方法,如告诉我们它的周长和面积。不光是圆,其他任何对象都有它的属性和方法,针对这样的特点,面向对象就把属性和方法结合起来。如下程序所示:

class Circle {
    double radius;// 半径
    Circle() {}// 构造器
    double getArea() { return 3.14 * radius * radius; }// 获取面积
    double getPerimeter() { 2 * 3.14 * radius; }// 获取周长
}

其中 Circle() {}是类Circle的构造器,它虽未做任何事,但它是用来在创建对象时初始化对象的,构造器的名字必须和类名相同。

值得一提的,类的属性都有默认值,这里的radius的默认值是 0.0。此外,属性以及方法的参数和返回值不仅可以是基本数据类型,还可以是引用数据类型,也就是对象和数组,如下所示

class MyClass {
    boolean bo;
    char c;
    byte b;
    short s;
    int i;
    long lo;
    float f;
    double d;

    String str;

    void getDefaultFieldValue() {
        print(bo);// false
        print(c);// '\0'
        print(b);
        print(s);
        print(i);
        print(lo);
        print(f);// 0.0
        print(d);// 0.0

        print(str);// null
    }

    String fun(String[] s) {// 返回值和参数可以是引用数据类型
        return s[1];
    }
}

2.3  创建对象

有了类以后,就要创建对象了。创建对象很简单,直接使用new创建即可,比如我们要创建一个Circle对象

new Circle();

这里使用了括号,很容易使我们想到方法,因此创建对象的同时必定调用了一个方法,即构造器。我们也可以向构造器传入参数,但前提是类必须要定义带有参数的构造器。

2.4  用引用操纵对象

创建对象后就该拿来使用,那如何操纵对象呢?用引用操纵对象,打个比方,我们创建了电视机这样的对象,它是放在堆里的,但平时我们总是使用遥控器控制它,遥控器就相当于引用变量,它是放在堆栈里的,这个引用变量不光可以控制一个电视机,当我们再创建一个相同的电视机时,这个引用变量也可以控制它。如下图解

上图说明了遥控器A(电视机的引用变量)能控制电视机 A(一个电视机对象)。遥控器A还可以改变它所控制的对象,转而控制电视机 B 或 C,如下所示

如上所示,遥控器 A既可以控制电视机 A,也可以改变控制方向,控制电视机 B。用Java程序来说明,如下

Television tv = new Television();// 电视机A
tv.on();// 打开电视机A
tv.off();// 关闭
tv = new Television();// 引用变量tv转而控制电视机B
tv.on();
tv.off();

可见,一个电视机引用变量就可以控制电视机 A 或 B。

除了用遥控器间接操纵对象,也可以直接按电视机的按钮,那就是直接操纵匿名对象,如下所示

new Television().on();// 打开电视机A
new Television().on();// 打开电视机B

然而,因为对象是匿名的,所以用过一次后就找不到它了,因此上述程序的两台电视机再也无法关闭了。

2.5  永远不需要销毁对象

使用完对象后,就得把对象销毁掉,在Java中都是通过垃圾回收器自动销毁对象的。那么当对象超出其作用域时会不会马上被销毁呢?不会,即使整个程序退出了,对象还不会马上被销毁,垃圾回收器总会在适当的时间销毁对象。

关于对象的创建和销毁涉及了JVM的内存分配和回收的机制,若要详细阐述,定会超出本文篇幅,且不再本文讨论范围,故此一笔略过。

2.6  第一个Java程序

终于可以编写第一个Java程序了,这里就展示经典的 Hello, world 程序

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, world");
    }
}

逐行解释一下,public 指的是访问控制符,这里的意思是HelloWorld是公共类,它可以在包外被访问,此外一个Java文件只能有一个public 类,可以包含任意多个非public 类,文件名必须和public 类的名字相同。第二行指的是main方法,它必须要用public static 修饰,如果把public改为其它修饰符,或者去掉static,结果是虽然通过了编译,但是运行时报错。String[] argsmain方法的参数,指的是接收String 数组,比如我输入命令"java HelloWorld hello world"让程序运行,那么String数组的第一个元素是hello,第二个元素是world。第三行打印结果,System是一个Java类库定义好的类,out是它的一个属性,或者说成员,是引用数据类型的。第三行所做的事是,类System的成员调用println方法打印了"Hello, world"。

[Java编程思想-学习笔记]第2章 一切都是对象的更多相关文章

  1. [Java编程思想-学习笔记]第3章 操作符

    3.1  更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("He ...

  2. [Java编程思想-学习笔记]第1章 对象导论

    1.1  抽象过程 Java是一门面向对象的语言,它的一个优点在于只针对待解问题抽象,而不用为具体的计算机结构而烦心,这使得Java有完美的移植性,也即Java的口号"Write Once, ...

  3. [Java编程思想-学习笔记]第4章 控制执行流程

    4.1  return 关键字return有两方面的用途:一方面指定一个方法结束时返回一个值:一方面强行在return位置结束整个方法,如下所示: char test(int score) { if ...

  4. 《java编程思想》P22-P37(第二章一切都是对象)

    1.JAVA操纵的标识符实际上是对象的一个"引用";如String s;里的s是String类的引用并非对象. 2.程序运行时,有五个不同的地区可以存储数据. (1)寄存器:最快的 ...

  5. Java编程思想学习(五)----第5章:初始化与清理

    随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一. C++引入了构造嚣(constructor)的概念,这是一个在创建对象时被自动调用的特殊方法.Java中也采用了构造器,并 ...

  6. Java编程思想 学习笔记11

    十一.持有对象  通常,程序总是根据运行时才知道的某些条件去创建新对象.在此之前,不会知道所需对象的数量,甚至不知道确切的类型. Java实用库还提供了一套相当完整的容器类来解决这个问题,其中基本的类 ...

  7. Java编程思想 学习笔记7

    七.复用类 1.组合语法 在新的类中产生现有类的对象.由于新的类是由现有类的对象所组成,所以这种方法叫做组合. 类中域为基本类型时能够自动被初始化为零.对象引用被初始化为null. 编译器不是简单地为 ...

  8. Java编程思想 学习笔记5

    五.初始化与清理 1.用构造器确保初始化  在Java中,通过提供构造器,类的设计者可确保每个对象都会得到初始化.创建对象时,如果其类具有构造器,Java就会在用户有能力操作对象之前自动调用相应的构造 ...

  9. Java编程思想 学习笔记2

    二.一切都是对象 1.用引用操纵对象 在Java中,一切都被视为对象,但操纵的标识符实际上是对象的一个“引用”.可以将这想象成遥控器(引用)来操纵电视机(对象).另外,没有电视机,遥控器也可以单独存在 ...

随机推荐

  1. C# PPT 为形状设置三维效果

    在PPT中,形状是非常重要的元素.3-D形状,立体多元,给人耳目一新的感觉.在幻灯片中添加3-D效果形状,必然会为PPT的整体效果增色不少.为形状设置三维格式时,可设置棱台,轮廓线,表面效果等. 本篇 ...

  2. 附录A 编译安装Hadoop

    A.1  编译Hadoop A.1.1  搭建环境 第一步安装并设置maven 1.  下载maven安装包 建议安装3.0以上版本(由于Spark2.0编译要求Maven3.3.9及以上版本),本次 ...

  3. VNC的安装和配置

    服务端环境:CentOS 6.7 客户端环境:Windows 7 1.服务器安装VNC服务端 2.编辑vnc配置文件 3.设定VNC的密码 4.查看vnc的会话信息 5.客户端测试vnc连接 Refe ...

  4. PHP中curl_init函数用法

    使用PHP的cURL库可以简单和有效地去抓网页.你只需要运行一个脚本,然后分析一下你所抓取的网 页,然后就可以以程序的方式得到你想要的数据了.无论是你想从从一个链接上取部分数据,或是取一个XML文件并 ...

  5. Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码)

    Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码) http://blog.csdn.net/helonsy/article/details/7207497 ...

  6. js数组去重的4种方法

    js数组去重,老生长谈,今天对其进行一番归纳,总结出来4种方法 贴入代码前 ,先对浏览器Array对象进行支持indexOf和forEach的polyfill Array.prototype.inde ...

  7. 微信公众账号 token 验证失败 解决办法

    问题:微信公众账号 开发过程中配置  token 提示 验证失败 如下图: 点击修改配置: 填写相关url与token(自定义):点击提交,会出现 出现这种情况,主要是对相关参数不熟悉,要了解url与 ...

  8. 小白Linux入门 二

    参考: http://edu.51cto.com/lesson/id-11222.html CPU中有计算单元 控制单元.它通过桥接芯片与存储器进行匹配 其中北桥是高速 南桥是低速 包括IDE USB ...

  9. C# .NET Socket封装

    Socket封装,支持多客户端,支持大文件传输,支持多线程并发,对较大的Socket包进行分块传输. 封装所要达到的效果,是可以像下面这样使用Socket和服务端通信,调用服务端的方法,让你在使用So ...

  10. 【Win10开发】Toast通知

    Toast 通知是一种发送给用户的暂时消息,包含相关的.具有时效性的信息,并且提供对应用中相关内容的快速访问.它可显示你是在另一个应用中.在“开始”屏幕上.在锁屏上,还是在桌面上.Toast 应该被视 ...