尽管 Java 是基于 C++的, 但相比之下,Java 是一种更"存粹"的面向对象的程序设计语言.
用引用操纵对象
遥控器(引用) --- 电视机(对象)
必须由你创建所有对象
1.存储到什么地方
- 寄存器: 最快, 位于处理器内部.容量有限,不受控制. 程序无法感知.
- 堆栈:RAM 中. 通过堆栈指针控制. 向下移动,分配内存, 向上移动,释放内存.
- 堆:通用的内存池,位于 RAM, 存放所有的 Java 对象. 与栈区别: 不需要关注存储的数据再堆里存活多长时间.
- 常量池: 程序代码内部.
- 非 RAM 存储: 流对象和持久化对象. 流对象: 对象转化为字节流,发送给另外一台机器.持久化对象: 对象存放于磁盘上.
2.基本类型
基本类型: 不用 new 创建变量, 创建一个并非是引用的"自动"变量,这个变量直接存储"值"并置于堆栈中.
高精度数字
BigInteger : 任意精度的整数
BigDecimal: 任意精度的浮点数
数组
当创建一个数组对象的时候,实际上创建了一个引用数组,并且每个引用都会自动被初始化一个特定的值 null.
永远不需要销毁对象
- 作用域: 作用域定义的变量,止可用于作用域结束之前.
- 对象作用域: 垃圾收集器处理
创建新的数据类型: 类 class
字段和方法
字段可以是任何类型的对象(必须初始化),可以通过其引用与其进行通讯. 也可以是基本类型中的一种.
基本成员默认值
不适用于 "局部" 变量
方法/参数和返回值
方法: 决定一个对象能够接收什么样的信息. 组成部分: 名称, 参数,返回值和方法体.
方法只有通过对象才能被调用.且这个对象必须能执行这个方法调用.
程序: 一些列带有方法的对象组合. 这些方法以其他对象为参数,并发送信息给其他对象.
构建 Java 程序
名字可见性
名字空间: 所有文件自动存活于他们自己的名字空间内,而且同一个文件内的每一个类都有唯一的标识符.
运用其他构建
import: 只是编辑器导入一个包, 告诉编译器你要的类是什么.
static 关键字
意味着这个域或方法不会与包含它的那个类的任何对象实例关联在一起.
在不创建任何对象的前提下,就可以调用它.
static 方法可以创建或使用与其类型相同的被命名对象.
static 字段对每个类来说都只有一份存储空间, 而非 static 字段则是对每个对象有一个存储空间.
你的第一个 Java 程序
public class ShowProperties { public static void main(String[] args) { System.getProperties().list(System.out); } }
输出如下:
Connected to the target VM, address: '127.0.0.1:60352', transport: 'socket'
-- listing properties --
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=/Library/Java/JavaVirtualMachines/jdk...
java.vm.version=25.161-b12
gopherProxySet=false
java.vm.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
path.separator=:
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg=sun.io
user.country=CN
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=unknown
java.vm.specification.name=Java Virtual Machine Specification
user.dir=/workspace/java-basis
intellij.debug.agent=true
java.runtime.version=1.8.0_161-b12
java.awt.graphicsenv=sun.awt.CGraphicsEnvironment
java.endorsed.dirs=/Library/Java/JavaVirtualMachines/jdk...
os.arch=x86_64
java.io.tmpdir=/var/folders/sf/ylyw50415l59z1ggvcyyt...
line.separator=java.vm.specification.vendor=Oracle Corporation
os.name=Mac OS X
sun.jnu.encoding=UTF-8
java.library.path=/Users/sysadmin/Library/Java/Extensio...
jboss.modules.system.pkgs=com.intellij.rt
java.specification.name=Java Platform API Specification
java.class.version=52.0
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
os.version=10.14.3
user.home=/Users/sysadmin
user.timezone=
java.awt.printerjob=sun.lwawt.macosx.CPrinterJob
file.encoding=UTF-8
java.specification.version=1.8
user.name=sysadmin
java.class.path=/Library/Java/JavaVirtualMachines/jdk...
java.vm.specification.version=1.8
sun.arch.data.model=64
java.home=/Library/Java/JavaVirtualMachines/jdk...
sun.java.command=com.step02.ShowProperties
java.specification.vendor=Oracle Corporation
user.language=zh
awt.toolkit=sun.lwawt.macosx.LWCToolkit
java.vm.info=mixed mode
java.version=1.8.0_161
java.ext.dirs=/Users/sysadmin/Library/Java/Extensio...
sun.boot.class.path=/Library/Java/JavaVirtualMachines/jdk...
java.vendor=Oracle Corporation
file.separator=/
java.vendor.url.bug=http://bugreport.sun.com/bugreport/
sun.cpu.endian=little
sun.io.unicode.encoding=UnicodeBig
sun.cpu.isalist=
Disconnected from the target VM, address: '127.0.0.1:60352', transport: 'socket'
编译运行:
编译: javac
运行 : java
注释和嵌入式文档
javadoc 只能为 public 和 protected 成员进行文档注释. private 和包内可访问成员的注释会被忽略掉.
具体标签略...