Java对象和类详解
Java的基本概念除了上篇文章所说的内容,还包括:
- 多态
- 继承
- 封装
- 抽象
- 重载
Java中的类和变量
但是最基础的还是要从类和对象开始入手。什么是类?什么是对象?接下来我们就进行一个详述。
首先是他们的概念:
对象是类的一个实例,具有状态和行为;而类是一个模板,定义状态和行为。
如果还不能理解,我们举个例子:
如果把狗这种动物当做一个类,那么金毛就是狗的一个实例化对象,边牧也是狗的一个实例化对象……这就是我对对象和类的理解。
那么如何理解对象的行为和状态呢?
还是以狗举例,比如我们在类——狗里面定义吃东西,睡觉,握手这三个行为以及年龄,性别这两个状态,那么我们实例化对象金毛的时候,其本身就会包含属性年龄和性别以及方法吃东西、睡觉和握手。
一个类可以包含的变量类型:
- 局部变量:在方法、构造方法或者语句块中定义的变量叫做局部变量。变量的声明和初始化都是在方法中,如果方法调用结束,那么变量也自动进行销毁。
- 成员变量:成员变量定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中的方法、构造方法和特定类的语句块进行访问。
- 类变量:类变量也声明在类中,方法体之外。但是必须声明为static类型。
一个类中也可以包含多种方法。
构造方法
每个类都存在构造方法, 如果没有显示地为类定义构造方法,Java编译器会自动为该类提供一个默认的构造方法。在创建类的时候,至少要调用一个构造方法,构造方法必须和类同名,一个类可以具有多个构造方法。
创建对象
创建对象需要三个步骤:
- 声明:声明一个对象,包括对象名称和对象类型。
- 实例化:使用关键词new创建对象。
- 初始化:使用new创建对象时,会调用构造方法初始化对象。
访问实例变量和方法
/*实例化对象*/
Object referenceVariable = new Constructor();
/*访问类中的变量*/
referenceVariable.variableName;
/*访问类中的方法*/
referenceVariable.methodName();
源文件声明规则
在一个源文件中可以定义多个类,还存在import语句和package语句。
需要注意的规则:
- 一个源文件只能有一个public类
- 一个源文件可以有多个非public类
- 源文件的名称应该和public类的名称保持一致。
- 如果一个类定义在某个包中,那么这个package应该在源文件的首行。
- 如果在源文件包含import语句,那么应该放在package语句和类定义词之间。如果没有package语句,那么import语句应该放在源文件最前端。
- import语句和package语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。
Java包
包主要用来对类和接口进行分类。
import语句
在Java中,如果给出一个完整的限定名,包含包名、类名,那么Java编译器就能很容易定位到源代码或者类。import语句就是用来提供合适路径使得编译器快速找到某个类。
Java基本的数据类型
Java中存在两大数据类型:
- 内置数据类型
- 引用数据类型
下面分别介绍两种数据类型:
内置数据类型
Java提供了8种基本类型,分别是六种数字类型(四种整数型和两种浮点型),一种字符型,还有一种布尔型。
Byte:数据类型是8位,有符号,通过二进制补码进行表示的整数,范围是从-128~127,其默认值为0。同时byte的大小是int类型的四分之一。
Short:short数据类型是16位,有符号,通过二进制补码进行表示的整数,范围是-32768~32767,其默认值为0。同时short的大小是int的二分之一。
int:数据类型是32位,有符号,通过二进制补码进行表示的整数,范围是-2^31~2^31-1,一般的整型变量是int类型,默认值为0。
long:数据类型是64位,有符号,通过二进制补码进行表示的整数,范围是-2^63~2^63-1,默认值是0L。
Float:数据类型是单精度、32位的浮点数;在用于存储大型数组的时候可以节省空间,默认值为0.0f;浮点数不能用来表示精确的值。
double:数据类型是双精度、64位的浮点数;浮点数默认类型是double;不能精确表示值;默认值为0.0d。
Boolean:表示一位的信息,只存在true和false两个值,用来作为一种标志,默认值为false。
char:是单一的16位的unicode字符,最小值是\u0000,最大值是\uffff。char类型可以存储任意字符。
(注:常用的用于字符串的存储类型还有String,可以用来存储字符串)。
引用类型
引用类型指向一个对象,那么指向对象的变量就是引用变量。引用变量一旦申明,就不能进行改变了。对象、数组都是引用数据类型,默认值都是null。引用变量可以用来引用任何与之兼容的类型。
Java常量
常量再程序运行时不能被修改,在Java中通过使用final关键字进行修饰。
类型转换
自动类型转换
整型、常量、字符型数据可以进行混合运算,在运算过程中,不同类型的数据先转化为同一类型,之后再进行运算。
转换过程从低到高:byte——>short——>char——>int——>long——>float——>double
类型转换必须满足的规则:
- 不能对布尔类型数据进行转换
- 不能将对象类型转换为不相关类的对象。
- 在将大容量的类型转换为小容量类型时使用强制类型转换。
- 在转换过程中会可能导致溢出或者损失精度。
- 浮点数到整数通过的是损失小数,并非四舍五入。
自动类型转换:
转换前的数据类型低于转换后的数据类型。
强制类型转换:
转换的数据类型必须兼容
隐含强制类型转换:
- 整数的默认类型是int
- 小数默认类型是double,定义float类型必须在数字后面跟上F或者f。
Java变量类型
基本格式:type 变量 = value或者type 变量1,变量2。