Java基础教程(11)--对象
一.创建对象
下面的语句创建了一个对象并把它的引用赋值给了一个变量:
Point originOne = new Point(23, 94);
这条语句由三部分组成(下面将详细讨论):
- 声明对象变量:声明一个可以引用稍后创建的对象的变量。
- 实例化类:new关键字是实例化类的操作符。
- 初始化对象:new从操作符将会调用类的构造器,从而完成对象的初始化。
1.声明对象变量
就像声明基本数据类型的变量一样,声明对象变量的语法如下:
ClassName variableName;
这会告诉编译器variableName将会用来引用一个ClassName类的对象。在使用这个变量之前,必须将一个对象的引用赋值给它,否则将会造成编译错误。
2.实例化类
new操作符通过为对象分配内存并返回对这块内存的引用来实例化一个类。new操作符还会调用构造方法。
new操作符后需要一个对构造方法的调用。构造方法的名字也就是需要实例化的类的名字。
可以不将new操作符返回的引用赋值给变量,它可以直接用在表达式中:
int x = new Point(1, 5).getX();
3.初始化对象
下面是Point类的代码:
public class Point {
public int x = 0;
public int y = 0;
//constructor
public Point(int a, int b) {
x = a;
y = b;
}
}
Point类包含一个构造方法。这个构造方法接受两个整数参数,下面的代码提供23和94作为这些参数的值:
Point originOne = new Point(23, 94);
这条语句的结果可以用下面这张图说明:

下面是RectAngle类的代码,这个类有四个构造方法:
public class Rectangle {
public int width = 0;
public int height = 0;
public Point origin;
// four constructors
public Rectangle() {
origin = new Point(0, 0);
}
public Rectangle(Point p) {
origin = p;
}
public Rectangle(int w, int h) {
origin = new Point(0, 0);
width = w;
height = h;
}
public Rectangle(Point p, int w, int h) {
origin = p;
width = w;
height = h;
}
// a method for moving the rectangle
public void move(int x, int y) {
origin.x = x;
origin.y = y;
}
// a method for computing the area of the rectangle
public int getArea() {
return width * height;
}
}
如果一个类有多个构造方法,则它们必须具有不同的签名。Java编译器根据参数的数量和类型区分构造方法。下面的代码创建了一个Point类的对象,并使用它和另外两个整数作为参数来创建一个RectAngle类的对象:
Point originOne = new Point(23, 94);
Rectangle rectOne = new Rectangle(originOne,100,200);
这条语句的结果可以用下面这张图说明:

所有类至少有一个构造方法。如果类没有提供构造方法,则Java编译器会自动提供一个无参构造方法,称为默认构造方法。此默认构造方法会调用类父级的无参构造方法。如果类没有使用extends关键字直接继承父类,这个类将会有一个隐含的父类——Object类,它有一个无参构造方法。如果类使用extends关键字继承了父类,但是父类没有无参构造方法,编译器将会给出错误。
如果类提供的构造方法里不包括无参构造方法,编译器将不会自动提供无参构造方法。此时使用无参构造方法初始化对象将会产生一个错误。
二.使用对象
创建了一个对象之后,我们可以在接下来的代码中去使用它。可能是获取某个域的值,或者改变某个域的值,也可能是通过调用某个方法去执行一些操作。
使用以下的语法来访问一个对象的域:
objectReference.fieldName
对于上面的rectOne所引用的对象来说,我们可以以如下方式去访问它的height域:
rectOne.height
使用以下的语法来调用一个对象的方法:
objectReference.methodName(argumentList)
下面的语句调用了rectOne所引用的对象的getArea方法并将返回值赋值给了一个变量:
int area = rectOne.getArea();
垃圾回收
某些语言要求您跟踪所创建的所有对象,并在不再需要时明确销毁它们。明确地管理内存是乏味且容易出错的。Java虚拟机在确定一个对象不再使用时删除这个对象。这个过程称为垃圾回收。
当没有对该对象的引用时,虚拟机有资格对该对象进行垃圾回收。可以通过将变量设置为null来显式取消对该对象的引用。需要注意的是,程序可以对同一对象进行多次引用,在对象符合垃圾回收条件之前,必须删除对对象的所有引用。
Java基础教程(11)--对象的更多相关文章
- Java基础教程:对象比较排序
Java基础教程:对象比较排序 转载请标明出处:http://blog.csdn.net/wangtaocsdn/article/details/71500500 有时候需要对对象列表或数组进行排序, ...
- Java基础教程(5)--变量
一.变量 1.变量的定义 正如上一篇教程<Java基础教程(4)--面向对象概念>中介绍的那样,对象将它的状态存在域中.但是你可能仍然有一些疑问,例如:命名一个域的规则和惯例是什么?除 ...
- Java基础教程:HashTable与HashMap比较
Java基础教程:HashTable与HashMap比较 1. 关于HashMap的一些说法: a) HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体.HashMap的底层结 ...
- Java基础教程(18)--继承
一.继承的概念 继承是面向对象中一个非常重要的概念,使用继承可以从逻辑和层次上更好地组织代码,大大提高代码的复用性.在Java中,继承可以使得子类具有父类的属性和方法或者重新定义.追加属性和方法. ...
- Java基础教程(12)--深入理解类
一.方法的返回值 当我们在程序中调用方法时,虚拟机将会跳转到对应的方法中去执行.当以下几种情况发生时,虚拟机将会回到调用方法的语句并继续向下执行: 执行完方法中所有的语句: 遇到return语句: ...
- Java基础教程:注解
Java基础教程:注解 本篇文章参考的相关资料链接: 维基百科:https://zh.wikipedia.org/wiki/Java%E6%B3%A8%E8%A7%A3 注解基础与高级应用:http: ...
- Java基础教程:网络编程
Java基础教程:网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个s ...
- Java基础教程:Lambda表达式
Java基础教程:Lambda表达式 本文部分内容引用自OneAPM:http://blog.oneapm.com/apm-tech/226.html 引入Lambda Java 是一流的面向对象语言 ...
- Java基础教程:泛型基础
Java基础教程:泛型基础 引入泛型 传统编写的限制: 在Java中一般的类和方法,只能使用具体的类型,要么是基本数据类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制就会束缚 ...
随机推荐
- 安装 rabbitmq ,通过生成器获取redis列表数据 与 Celery 分布式异步队列
一.安装rabbitmq @全体成员 超简易安装rabbitmq文档 1.安装配置epel源rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/ ...
- mybatis的dao向mapper.xml传入多参数
https://www.cnblogs.com/super-chao/p/7722411.html 如果两种不同类型的参数传入,parameterType可以不写,直接获取#{0},#{1}就可以传入 ...
- jquery判断滚动到某个div显示底部按钮
判读滚动某个div显示底部按钮 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta char ...
- 刚才在windows下发现拖拽不了文件了
百度了下 摁了两下esc就可以了.以下是百度得到的答案 按几下Esc目的是:没按前ESC键[接触不好]或[键不灵]或其他原因导致ESC处于[按下]状态,这样鼠标就会拖不了文件,点击菜单也会马上消失, ...
- [bug] JS sort 函数在 ios 中无效
首先,请原谅我做一次标题党: 但我觉得从发现问题到最后解决问题的过程还是蛮有意思的,特此记录一下: 背景 近两天开发的航班延误宝是内嵌在客户端(android.ios)webview 中的 H5 页面 ...
- 五:MyBatis学习总结(五)——实现关联表查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
- iOS 中长按手势回调会被触发过两次
Long-press gestures are continuous. The gesture begins (UIGestureRecognizerStateBegan) when the numb ...
- day 45 Django 的初识2 路由层,视图层,模板层
前情提要: 今天继续学习Django 的内容, 今天主要和渲染相关 1>配置路由 >2:写函数 >3 指向url 一:路由层 1:配置静态支持文件 1:路由层的简单配置 >dj ...
- 剑指offer四十三之左旋转字符串
一.题目 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abc ...
- Java之IO(十一)BufferedReader和BufferedWriter
转载请注明源出处:http://www.cnblogs.com/lighten/p/7074488.html 1.前言 按照字节流的顺序一样,字符流也提供了缓冲字符流,与字节流不同,Java虽然提供了 ...