2.1、一切都是对象
JAVA思想:
①面向对象:JAVA假设
只进行面向对象的程序设计(无面向过程)
②面向对象的编程:1、定义类 2、产生类的对象 3、发送消息给对象(调用方法)
梗概:对象定义;与对象相关的概念、具体定义对象、对象(相关概念)的存储、对象的销毁
1、对象定义:
JAVA中一切都被视为对象,存储于内存的堆中
2、与对象相关的概念(引用、基本类型、数组)
A:(对象的)引用
①定义:某个对象的
标识符;可通过引用操纵对象;(其值为:对象在堆中的地址)
(对象:电视机;引用:遥控器)
②创建:
如:String s; (注意:1.创建的是引用,并不是对象;2.没有对象,引用也可以独立存在)
③使用:
a、修改对象(的成员变量/成员方法)——>只需操纵引用
b、在他处调用对象——>通过引用而非对象
④关联引用与对象:通过new关键字(new释义:给我一个新对象)
如: String s = new String("asdf");
B:基本类型(特殊的对象)
①与对象的区别:某些对象只需存储一个“值”,如果与对象一样存放于堆中速度过慢,故直接存储于堆栈中(存储位置上和引用相同)
②存储空间不变性:JAVA的每种基本类型所占存储空间大小不随机器硬件架构变化(程序更具可移植性)
③包装器类:每种基本类型都有对应的包装器类,包装器类属于对象,拥有自动包装(基本类型——>包装器类)和反向功能
④2个特殊的包装器类——BigInteger和BigDecimal:
二包装类没有对应的基本类型;但其提供的方法与基本类型int、float的操作相似,但方法执行的速度较慢;两包装类支持任意精度的整数、定点数
C:数组(一组对象)
① c、c++的数组:就是内存块,会出现两个问题:在数组初始化前使用内存、访问自身内存块以外的数组
②JAVA的数组:确保数组会被初始化、不能在它的范围之外被访问(代价:内存开销、运行时下标检查)
③具体:
a、数组对象:创建引用数组,每个引用初始化为null(引用还没有指向某个对象,使用还是null的引用会报错)
b、基本数据类型数组:初始化内存全部置0
3、如何确定对象的外观与行为:类
①类存在的意义:
确定对象的外观(字段)和行为(方法)
②类的创建:
A. 关键字class 类名(之后用new来创建类的对象,分配字段的存储空间,方法供外界调用)
B. 在类中设置两种类型的元素:
a、字段(数据成员、成员变量):
1:对象(通过对象的引用与对象进行通信)(必须有关联对象/初始化)
2:基本数据类型(最好明确初始化,若没有,则Java会在作为类的成员使用时给其赋默认值)
*:普通字段不能在对象间共享
b、 方法(成员函数、成员方法):
1、定义与作用:子程序的名字,其他语言也称“函数”,
决定一个对象能够接收什么样的消息
2、创建:只能作为类的一部分来创建;返回值、方法名、参数列表(和方法名并称方法签名)、方法体
3、调用:只能通过(可执行这个方法的)对象才能被调用
e.g: 对象名.方法(参数列表);
int x = a.f();
调用方法的行为被称为“发送消息给对象”(消息:f(),对象:a)(oop: 向对象发送消息)
4、参数列表:传递给方法什么样的信息,数据一般为对象(的引用)或基本类型;
4、对象(引用、基本类型)的存储:
a、寄存器:
1. 位置:位于处理器内部,数量极少;
2. 速度:最快的存储区;
3. 使用:按需分配不受程序控制(c、c++允许)
b、堆栈(zhan):
1. 位置:位于通用RAM(随机访问存储器)中,通过堆栈指针可从处理器那里获得直接支持(指针下移:分配新的内存;指针上移:释放那些内存)
2. 速度:仅次于寄存器
3. 使用:存储对象的引用、基本类型变量,但不存储Java对象(创建程序时,Java系统必须知道存储在堆栈内所有项的确切生命周期,限制了程序的灵活性)
c、堆:
1. 位置:一种通用的内存池(也位于RAM区)
2. 速度:存储分配与清理比堆栈慢
3. 使用:存放所有的JAVA对象(使用new自动存储分配)(编译器无需知道存储的数据在堆里存活多长时间)
d、常量存储:
通常情况:存储在程序代码内部(不会改变,故安全)
嵌入式系统:存储在ROM只读存储器中
e、非RAM存储:
流对象:对象转换为字节流
持久化对象:存放于磁盘
5、对象的销毁
①(基本数据类型)变量的作用域:
决定了在其内定义的变量名的可见性和生命周期
②对象的作用域:
与基本类型不同,当用new创建一个Java对象时,它可以存活于作用域之外
e.g:{ String s = new String("a string"); }
结果:引用s作用域终点后消失、s指向的String对象仍继续占据内存空间(但无法在作用域之外继续访问)
③对象的作用域的回收:
Java有一个垃圾回收器,可以:1.监视new创建的所有对象;2.辨别那些不会再被引用的对象
附录:基本数据类型(九种)
2.2、一切都是对象(二):构建
1. 名字可见性:反转域名,句点代表子目录的划分
2. 使用其他类:
①类在相同 .java 文件下:直接使用(类在文件的后面定义也可使用)
②类位于其他文件:使用关键字import导入包/类库(其他语言中类库还包含方法和数据)
3. static关键字:
①作用:
正常情况:定义类,创建类的对象(new),通过对象来访问成员变量或成员方法
特殊情况(static作用):在不创建对象的前提下——>①调用类的成员变量 ②调用类的成员方法(类的字段或方法不关联对象)
② 使用方法:将static关键字放在定义之前
a、修饰类的成员变量:若创建多个对象,其引用指向同一存储空间
b、修饰类的成员方法:main()方法(如main非静态,则需要创建main所在类的对象,且实例化main的类也需要被实例化,没有穷尽,故为静态方法)
③调用方法:类名.成员变量;类名.成员方法(); (*:类名替换为对象名亦可,但效率可能降低)
④static方法:可以创建或使用与其类型相同的被命名对象,故通常负责看护与其隶属同一类型的实例群
4. import引入文件中需要的额外类,java.lang这个类会自动被导入到每一个Java文件中
5. 文件中必须存在一个类:①与文件同名 ②包含main()方法
6. 编码风格:类名——大驼峰命名法;
方法、字段(成员变量)、对象引用名——小驼峰命名法
驼峰命名法:单词拼在一起(无下划线)、每个单词首字母大写