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. MySQL半同步复制

    从MySQL5.5开始,MySQL以插件的形式支持半同步复制.如何理解半同步呢?首先我们来看看异步,全同步的概念 异步复制(Asynchronous replication) MySQL默认的复制即是 ...

  2. centos7 mysql数据库安装和配置

    一.系统环境 yum update升级以后的系统版本为 [root@yl-web yl]# cat /etc/redhat-release CentOS Linux release 7.1.1503 ...

  3. 写给后端程序员的HTTP缓存原理介绍

    There are only two hard things in Computer Science: cache invalidation and naming things. -- Phil Ka ...

  4. SwitchButton 开关按钮 的多种实现方式

    刚开始接触开关样式的按钮是在IOS系统上面,它的切换以及滑动十分帅气,深入人心. 所谓的开关按钮,就是只有2个状态:on和off,下图就是系统IOS 7上开关按钮效果. 起初我在android上我只会 ...

  5. Android之ListView的getItemViewType和getViewTypeCount

    PS:感觉这两个方法其实还是很容易理解的,也算是给我其他两个朋友写的吧,帮他们搞清楚这两个方法的用法和概念.同时还有一些小细节问题需要注意. 学习内容: 1.getItemViewType和getVi ...

  6. Data source rejected establishment of connection, message from server: "Too many connections"解决办法

    异常名称 //数据源拒绝从服务器建立连接.消息:"连接太多" com.MySQL.jdbc.exceptions.jdbc4.MySQLNonTransientConnection ...

  7. 在 .NET 中远程请求 https 内容时,发生错误:根据验证过程,远程证书无效。

    当访问 https 内容的时候,有时候经常会看到证书错误(不在操作系统的证书信任链中?)的提示,在浏览器中我们可以忽略错误的证书,继续访问网页内容. 但是在 .NET 程序中,需要由代码来判断是否忽略 ...

  8. deviceFilters与设备过滤

    本主题是ASP.NET在移动设备上展示的方面的内容 起初看起来deviceFilters与前面的browserCaps类似.同样也会关联到HttpBrowserCapabilities,而在这里用到的 ...

  9. swift相关

    1.界面上一个输入框,一个按钮,一个webview .点按钮,webview显示输入框中输入的url的页面. @IBOutlet var wv:UIWebView = nil          //定 ...

  10. assign()