一切都是对象
程序员文章站
2024-03-17 18:32:28
...
一切都是对象
文章目录
2.1用引用操作对象
在Java中一切都被视为对象。尽管一切都可以 看作 对象,但是操纵的标识符实际上是对象的一个 引用(reference) 。
此外引用可以单独存在。如:
String s; //单纯的一个引用。
String str="abc"; // 创建引用的同时进行初始化。
2.2必须有你创建所有对象
一旦创建了一个引用,就希望它能与一个新的对象相关联。通常用 new 操作符来实现。new 关键字的意思是 “给我一个新对象”。所以前面的例子可以写成
String s=new String("abc");
2.2.1存储到什么地方
- 寄存器 :这是最快的存储区,因为它存在于CPU的内部。但是其数量极其有限。你不能控制它的分配。
- 堆栈 :位于RAM(随机访问存储器,这里说一下 随机 的意思:随机是想读哪就读哪,而不是不受控制随便的读取数据),但通过 堆栈指针 可以从cpu那里获取支持,前面说到过,只需要移动栈顶指针就好。但是这约束了程序的灵活性。所以某些Java数据存储在堆栈中——特别是对象的引用,但是对象存储在堆中。
- 堆 :一种通用内存池(也位于RAM中),用于存放所有Java对象。堆不同于栈的是:编译器不需要知道对象要存活多长时间。因此具有灵活性。不过这是有代价的,这要花费更多时间。
- 常量存储 常量值通常存储于代码中。因为他们永远不会改变。
-
非RAM存储 :数据完全存活于数据之外。如 流对象 和 持久化对象 。
- 流对象:将对象转化为字节流,通常被发送给另一机器。
- 持久化对象:对象被存放在磁盘上,即使程序终止它们依然可以存在。
2.2.2特例:基本类型
基本对象不使用 new 创建,而是创建一个并非是引用的 “自动” 变量。这个变量直接存储值,并置于堆栈中。
- 基本类型具有包装器类,使得可以在堆中创建一个非基本对象如
char c= 'x';
Character ch = new Character(c);
//或
Character ch = new Character('x');
//或
Character ch = 'x";
//并可以反向转换
char c = c ;
- 高精度数字
1. BigInteger (整数)
2. BigDecimal(任意精度定点数)
2.2.3Java中的数组
- Java的数组是安全的。其有边界检查
- 当创建了一个数组对象时,实际上就是创建了一个引用数组,并且每个引用都会被自动化初始为某个值,该值有自己的关键字 null 。一旦Java看见 null ,说明这个引用还没有指向某个对象。使用这样的引用java将会在运行时报错。
- 还可以创建存储基本数据类型的数组,并且自动置零。
2.3永远不要销毁对象
2.3.1作用域(scope)
作用域决定了在其内定义的变量名的可见性和生命周期。
c/c++中的 隐藏 特性在Java中不适用,如下面的代码在c/c++中是正确的,但是在Java中是错的
{
int x=12
{
int x=65;
}
}
2.3.2对象的作用域
当 new 一个对象时,它可以存活于作用域之外。但是其引用在作用域终点消失。
如果有用该对象就会一直存在,否则 垃圾回收器 就会清理这些对象。
2.4创建新的数据类型:类
class ATypeName //定义一个名为 ATypeName 的类
{
//class body
}
ATpyeName a =new ATypeName();
2.4.1字段和方法
类中可以存在两种元素
- 字段 :有时被称为 数据成员。其可以是任何类型的对象。可以使用其引用与其进行通信。也可是基本类型。如果字段是某个对象的引用,那么必须初始化该引用。如果是基本类型,就会赋上默认值。
- 方法 :见2.5
2.5 方法,参数和返回值
ReturnType methodName ( /*argument list */){
//methodBody
}
- 方法名和参数列表合称为 方法签名 ,其能唯一的标识某一方法。
- Java中的方法只能作为类的一部分来创建。
ReturnType a=methodName(arg1,arg2,...);
//或
className.methodName(...);
- 这种调用方法通常被称为 发送消息给对象 ,消息是 methodName(),对象是 className
2.6构建第一个Java程序
2.6.1名字可见性
为了区分重名类,可以使用域名反转作为包名(如:com.baidu)
2.6.2使用其他构件
使用 import 关键字
如
import java.util.ArrayList; //单个导入
//或
import java.util.*;//批量导入
2.6.3static关键字
通常来说,只有 new 之后,才会为其分配内存。
但是有两种情形是上面所无法解决的:
- 只想单独分配一段空间,但是不考虑要创建对象(如声明一个变量作为对象计数器)
- 希望某个方法不与包含它的类的对象联系在一起。
有些地方称上述为 类数据 和 类方法
其常常充当 牧羊人 的角色
class StaticTest{
static int i=47;
static increment(){ StaticTest.i++; }
}
StaticTest st1=new StaticTest();
StaticTest st2=new StaticTest();
StaticTest.i++; // st1 st2 中的i都会变为 48 (类数据)
StaticTest.increment(); // 变为 49 (类方法)
2.7略
注意几点
- 类名要和包名相同
- 入口函数
public static void main(String[] args){}
2.8注释和嵌入式文档
2.9编码风格
上一篇: 《java 编程思想》 读书笔记 (二)
下一篇: java编程思想-02一切都是对象