一切都是对象

一切都是对象

2.1用引用操作对象

在Java中一切都被视为对象。尽管一切都可以 看作 对象,但是操纵的标识符实际上是对象的一个 引用(reference)
此外引用可以单独存在。如:

String s; //单纯的一个引用。
String str="abc"; // 创建引用的同时进行初始化。

2.2必须有你创建所有对象

一旦创建了一个引用,就希望它能与一个新的对象相关联。通常用 new 操作符来实现。new 关键字的意思是 “给我一个新对象”。所以前面的例子可以写成

String s=new String("abc");

2.2.1存储到什么地方

  1. 寄存器 :这是最快的存储区,因为它存在于CPU的内部。但是其数量极其有限。你不能控制它的分配。
  2. 堆栈 :位于RAM(随机访问存储器,这里说一下 随机 的意思:随机是想读哪就读哪,而不是不受控制随便的读取数据),但通过 堆栈指针 可以从cpu那里获取支持,前面说到过,只需要移动栈顶指针就好。但是这约束了程序的灵活性。所以某些Java数据存储在堆栈中——特别是对象的引用,但是对象存储在堆中。
  3. :一种通用内存池(也位于RAM中),用于存放所有Java对象。堆不同于栈的是:编译器不需要知道对象要存活多长时间。因此具有灵活性。不过这是有代价的,这要花费更多时间。
  4. 常量存储 常量值通常存储于代码中。因为他们永远不会改变。
  5. 非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字段和方法

类中可以存在两种元素

  1. 字段 :有时被称为 数据成员。其可以是任何类型的对象。可以使用其引用与其进行通信。也可是基本类型。如果字段是某个对象的引用,那么必须初始化该引用。如果是基本类型,就会赋上默认值。
  2. 方法 :见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 之后,才会为其分配内存。
但是有两种情形是上面所无法解决的:

  1. 只想单独分配一段空间,但是不考虑要创建对象(如声明一个变量作为对象计数器)
  2. 希望某个方法不与包含它的类的对象联系在一起。
    有些地方称上述为 类数据类方法
    其常常充当 牧羊人 的角色
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编码风格

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值