声明
本文章是本人在bilibili视频的学习笔记,视频地址清华大学java语言49讲(郑莉教授)
在程序中,对象是通过一种数据结构类型来描述的,这种抽象数据类型称为类(class)
抽象数据类型:类
(C语言)
通讯录:用一个结构体来保存 QQ,住址,电话号码,等不通的数据类型
结构体不能进行整体操作。
C++的结构体是一种特殊的类,C语言结构体只能一个一个的数据成员拿出来操作
C语言中定义了结构体,不能算作定义了新的数据类型(C语言中称为:自定义数据类型)
新的数据类型应该包括:
1.数据的存储结构
2.在数据上面,允许的计算
Java中定义了一个类,就是定义了一种数据类型,以及在类型上的操作
(数据类型就是对一类对象的描述)
类是构造对象的模板,对象是类的实例
(使用是使用具体的对象,而不是类型名(数据类型))
int a; //我需要使用a而不是int
类声明形式
[public] [abstract] [final] class 类名称
[extends 父类名称]
[implement 接口名称列表]
{
变量成员声明及初始化;
方法声明及方法体
}
[public]
(类的访问控制属性,规定类在什么范围之内可以使用) C语言:作用域,可见性,生存期(函数之间数据共享)[abstract]
指明此类为抽象类 抽象类定义一个不能够具体化的概念 整个类家族统一顶层的定义 更多是为了设计的目的而存在(不能产生实例)[final]
指明此类为终结类 Java中用来定义常量(C,C++用const定义常量)
类的成员也可以用final,指的是常成员,定义final的类可以被重用,但不希望被改变
(不要继承过去修改使用,原样使用)
[extends]
如果声明的类是从某一父类派生而来,那么,父类的名字应写在extends之后继承即是设计的重用,又是代码的重用
[implement]
如果所声明的类要实现某些接口,那么,接口的名字应写在implements之后接口好像是一种完全抽象的类
万能遥控器好像是一个接口
不同设备启动的步骤不一样,而万能遥控器都可
不同的设备都实现了万能遥控器(的信号的接口)
接口规定了功能(启动,关闭)
不同的设备都可实现(启动,关闭) 这个接口,但需要描述具体实现方式
(继承即是设计的重用,又是代码的重用)
(实现一个接口纯粹是设计的重用)
只设计我需要哪些功能,只重用
引用
定义一个引用类型的变量(无指向的空引用)
2.构造一个对象
3.将对象的引用放到此变量
生成引用实例的格式
new <类名>()
例如: aclock = new Clock()
//定义了一个指向钟表类的引用,但指向哪个对象呢?不知道,还是一个空引用
//new 构造一个Clock类型的新对象
(Clock后面的括号为了初始化,钟表出厂可以预设定时间)
( int a= 0; int a(0); C中初始化变量)
new很像C中的内存分配
使用new首地址不用关心,分配几个字节也不用关心,自动判断对象需要多少个字节,恰当分配字节数
你不用去关心真正的地址,引用相当于存储地址,但不是真正的地址(和指针有差别,因为java抽象程度更高)
C语言内存分配,告诉分配几个字节,将真实首地址传过来
数值类型,自动初始化为0
引用类型,自动初始化为null
自动装箱拆箱
Java5新特性,基本数据类型与对应的类对象之间,进行移动的拆装和装箱(对象取数/往对象装数)
每一个数据类型都对应一个类
int 类中有方法
double
自动装箱
Java5之前 Integer i= new Integer(2); Java5 Integer i= 3;目的:整数2装到Integer对象i中
//构造一个新对象,用2作为参数
//java5后自动构造一个新对象(如右边有值)
自动拆箱
目的:将Integer类型对象的整数取出 Java5之前 int j=i.intValue();//用interValue将对象的整数取出来
//赋值给基本类型的变量
为什么要有基本数据类型的对象?
后面会讲到java的集合框架,java专门有类去存放集合类型的数据,比如存放一个线性表,存放一个矩阵
集合类型的数据中,每一个具体的数据,每一个个体,必须是对象,不能是基本类型的数据
Java5之后的拆装箱(取/赋值),自动解析/生成对象。(因为底层机制是存放对象的)
数据成员
表示java类的状态 此对象区分于彼对象的基本依据(特征)每个学生都有学号姓名,但又基本不同,他们是不同的对象
在一个类中,成员变量的变量名是唯一的
数据成员可以是java中的任意数据类型,基本类型,类类型,接口,数组
定义形式:必须有类型名和变量名
//前面可有修饰的关键字,表示访问控制属性