类和对象的介绍
类是Java支持的五种引用类型之一(五种引用类型是:类、数组、枚举、接口、注解)。
类是一种数据类型,而类表示的值是对象。
声明对象不会创建这个对象,必须使用new运算符。除此之外,还有一些其它的方式来创建对象:
- 有些符合特定条件的类很重要,Java定义了专用的字面量句法,用于创建这些类型的对象。
- Java支持动态加载机制,允许程序动态加载类和创建对象
- 对象还可以通过反序列化来创建。对象的状态可以保存或序列化到文件中,然后使用java.io.ObjectInputStream类来重新创建。
上面提到了字面量句法,下面进行介绍:
- 字符串字面量,方法是把字符放在双引号之间。
- 类型字面量,Class类的实例表示一种Java数据类型,而且包含所表达类型的元数据。若想使用Class字面量,要在数据类型后面加上.class。例如:
Class<?>typeInt = int.class;
Class<?>typeIntArray = int[].class;
Class<?>typePoint = Point.class;
- null引用,null关键字是一种特殊的字面量,引用不存在的值,或者不引用任何值。
lambda表达式,语法如下:
(paramlist) -> {statements}
数组
Java中,和创建对象一样,使用new关键字创建数组。
每个元素都会自动初始化,初始值和类中的字段的默认值相同:
- boolean : false
- char : \u0000
- 整数元素 :0
- 浮点元素 : 0.0
- 引用类型 : null
所有数组类型都实现了Cloneable
接口,任何数组都能调用clone()
方法来复制自己。(注意,返回值必须校正成适当的数组类型)
int[] data = {1,2,3};
int[] copy = (int[])data.clone();
clone()
方法执行的是浅复制,如果数组元素是引用类型,那么只复制引用。而不复制引用的对象。正因为是浅复制,任何数组都可以被复制。
对整个数组元素进行复制时,使用System.arraycopy()
方法,可以假定该方法会在底层硬件中使用高速的块复制方法执行操作。
引用类型
引用类型和基本类型区别:
- 八种引用类型由Java定义,引用类型由程序员定义
- 基本类型是单个值,引用类型是聚合类型,可以保存多个基本值或对象
- 基本值传入方法时,会复制表示这个值的字节;对象传入时,不会复制该对象的内存,而是把这个对象的引用传入
- 创建对象时会在堆(heap)上动态分配内存,如果不再使用这个对 象,该内存会被自动回收
int x=42;
int y =x;
运行上面代码后,整数42会有两个独立的副本。
Point p = new Point(1.0,2.0);
Point q = p;
执行上面的代码后,Java虚拟机内部仍然只有一个Point对象副本。
对象比较
相等运算符(==)比较基本值时,只测试两个值是否完全一样。而比较引用值时,比较的是引用而不是真正的对象。也就是说,==测试的是两个引用是否指向同一个对象,而不是两个对象内容是否相同。
所有对象都从Object
类继承了equal()
方法,但是默认是使用==测试引用是否相等。
注:比较数组是否相等可以使用
java.util.Arrays.equal()
方法
包和Java命名空间
包由一些具名的类、接口和其他引用类型组成,目的是把相关的类组织在一起,并为这些类定义命名空间。
Java平台的核心类放在以java开头的包中。如:基本类:java.lang
、实用类:java.util
、输入输出:java.io
、网络类:java.net
包的声明
Java使用package
声明类所属的包。package
必须是Java代码的第一个标记。如:
package org.apache.commons.net;
若无package指令,那么这个文件中所有的类都属于一个无名的包。
默认在Java中引用类或接口时,必须使用类型的完全限定名称,即包含包名。不过这个规则有三个例外:
java.lang
中的类型很重要也很常用,因此始终可以使用简称引用p.T
类型中的代码可以使用简称引用 p包中定义的其他类型- 已经使用
import
声明导入命名空间的类型,可以使用简称引用
类型的导入
import
声明必须放在Java文件的开头,紧随在package
声明之后。
import
声明有两种格式:
- 导入单个类型:
import java.io.File;
- 按需导入:
import java.io.*;//java.io包中的类都可以使用简称
注:按需导入的句法对子包无效
导入静态成员
使用import static
导入类型中的静态成员,与上述类似,也支持单个导入和按需导入。import static
一个重要作用是把常量导入代码,特别是导入枚举。
注:从多个不同类型中导入同名的静态方法也是合法的,只要方法签名不同。
Java文件结构
java文件限制:
- 一个文件中最多只能有一个声明为
public
的顶层类。一个类中,可以有多个声明为public的嵌套类或内部类。- Java文件名必须和文件中顶层public类的名称相同
- Java程序入口为一个特殊方法:
public static void main(String[] args)