第2章 一切都是对象
2.1 用引用操纵对象
创建一个引用
String s;
引用关联一个对象
String s = new String("aaa")
2.2 必须由你创建对象
Java对象引用存储在堆栈中,存取快,但是不灵活
Java对象存储在堆里,编译器不知道数据存活时间,所以有灵活性
基本类型的值,直接存储在堆栈里
boolean
char(2)
byte(1)
short(2)
int(4)
float(4)
long(8)
double(8)
void
基本类型具有包装器类,可以在堆中创建一个非基本对象
char c = 'x';
Character ch = new Character(c);
Character ch = new Character('x');
Character ch = 'x';
char c = ch;
高精度数字
BigInteger 整数
BigDecimal 定点数
Java中的数组确保会被初始化,且不能在它的范围之外被访问
创建数组对象实际上是创建了一个引用数组
2.3 永远不需要销毁对象
Java中基本类型的作用域只在花括号内
这种是不允许的
{
int x;
{
int x = 96;
}
}
Java对象可以存活于作用域之外
{
String s = new String("a string");
}
s在作用域后就消失了,s指向的String对象仍继续占据内存空间
2.4 创建新的数据类型:类
class ATypeNmae {}
ATypeName a = new ATypeName();
字段
class DataOnly {
int i;
double d;
boolean b;
}
字段赋值
data.i = 47;
data.d = 1.1;
data.b = false;
基本成员初始值
boolean | false |
---|---|
char | ‘\uooo(null)’ |
byte | (byte)o |
short | o |
int | o |
long | oL |
float | o.of |
double | o.od |
int x;
//基本类型作为类的成员时,才给定默认值
//局部变量不赋初始值,编译器会报错
2.5 方法,参数和返回值
//名称,参数,返回值,方法体
ReturnType methodName(/* Argument list */) {
/* Method body */
}
方法只能通过对象调用
objectName.methodName(arg1, arg2, arg3);
int x = a.f();
//返回值类型必须与x兼容
//调用方法的行为通常被称为发送消息给对象
参数列表传递的实际上是引用,传递引用的类型必须正确
int storage(String s) {
return s.length() * 2;
}
2.6 构建一个Java程序
名字可见性
Java通过反转域名划分目录,定义类库,以解决模块重名问题
import java.util.ArrayList;
import java.util.*;
//import 来导入类库
static关键字
class StaticTest {
static int i = 47;
}
StaticTest st1 = new StaticTest();
StaticTest st1 = new StaticTest();
//st1.i 和 st2.i 指向同一存储空间
StaticTest.i++;
//可以直接用类名引用静态成员
class Incrementable {
static void increment() { StaticTest.i++; }
}
Incrementable sf = new Incrementable();
sf.increment();
第一个Java程序
import java.util.*;
public class HelloDate {
public static void main(String[] args) {
System.out.println("Hello, it's: ");
System.out.println(new Date());
}
}
// out 是PrintStream的一个静态对象
// public static void main(String[] args) {}
展示一些属性
public class ShowProperties {
public static void main(String[] args) {
System.getProperties().list(System.out);
System.out.println(System.getProperty("user.name"));
System.out.println(System.getProperty("java.libary.path"));
}
}
– listing properties –
gopherProxySet=false
awt.toolkit=sun.lwawt.macosx.LWCToolkit
java.specification.version=10
file.encoding.pkg=sun.io
sun.cpu.isalist=
sun.jnu.encoding=UTF-8
java.class.path=.
java.vm.vendor=“Oracle Corporation”
sun.arch.data.model=64
java.vendor.url=http://java.oracle.com/
user.timezone=
os.name=Mac OS X
java.vm.specification.version=10
sun.java.launcher=SUN_STANDARD
user.country=CN
sun.boot.library.path=/Library/Java/JavaVirtualMachines/jdk…
sun.java.command=ShowProperties
jdk.debug=release
sun.cpu.endian=little
user.home=/Users/nihao
user.language=zh
java.specification.vendor=Oracle Corporation
java.version.date=2018-07-17
java.home=/Library/Java/JavaVirtualMachines/jdk…
file.separator=/
java.vm.compressedOopsMode=Zero based
line.separator=
java.specification.name=Java Platform API Specification
java.vm.specification.vendor=Oracle Corporation
java.awt.graphicsenv=sun.awt.CGraphicsEnvironment
user.script=Hans
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
java.runtime.version=10.0.2+13
user.name=nihao
path.separator=:
os.version=10.15.1
java.runtime.name=Java™ SE Runtime Environment
file.encoding=UTF-8
java.vm.name=Java HotSpot™ 64-Bit Server VM
java.vendor.version=18.3
java.vendor.url.bug=http://bugreport.java.com/bugreport/
java.io.tmpdir=/var/folders/zm/7dc03kv57hb4x6537cz9s…
java.version=10.0.2
user.dir=/Users/nihao/Documents/文稿/tijava/object
os.arch=x86_64
java.vm.specification.name=Java Virtual Machine Specification
java.awt.printerjob=sun.lwawt.macosx.CPrinterJob
sun.os.patch.level=unknown
java.library.path=/Users/nihao/Library/Java/Extensions:…
java.vendor=Oracle Corporation
java.vm.info=mixed mode
java.vm.version=10.0.2+13
sun.io.unicode.encoding=UnicodeBig
java.class.version=54.0
nihao
null
javadoc命令
/** 开始
*/ 结束
/** A class comment */
public class Documentation1 {
/** A field comment */
public int i;
/** A method comment */
public void f() {}
}