一、Java对象和类:
对象是类的一个实例,有状态和行为。类是一个模版,描述一类对象的行为和状态。对象的状态就是属性,行为通过方法体现。方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。
一个类可以包含以下类型变量:局部变量——在方法、构造方法或者语句块中定义的变量被称为局部变量,变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁;成员变量——成员变量是定义在类中,方法体之外的变量,这种变量在创建对象的时候实例化,成员变量可以被类中方法、构造方法和特定类的语句块访问;类变量——类变量也声明在类中,方法体之外,但必须声明为 static 类型。
每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。示例:
public class Puppy{
public Puppy(){
}
public Puppy(String name){
// 这个构造器仅有一个参数:name
}
}
对象是根据类创建的,在Java中,使用关键字new来创建一个新的对象。创建一个对象需三步:一、声明:声明一个对象,包括对象名称和对象类型;二、实例化:使用关键字new来创建一个对象;三、初始化:使用new创建对象时,会调用构造方法初始化对象。示例:
public class Puppy{
public Puppy(String name){
//这个构造器仅有一个参数:name
System.out.println("company : " + name );
}
public static void main(String[] args){
// 下面的语句将创建一个Puppy对象
Puppy myPuppy = new Puppy( "JD" );
}
}
访问实例变量和方法:
/* 实例化对象 */
Object referenceVariable = new Constructor();
/* 访问类中的变量 */
referenceVariable.variableName;
/* 访问类中的方法 */
referenceVariable.methodName();
源文件声明原则:
● 一个源文件中只能有一个 public 类;
● 一个源文件可以有多个非 public 类;
● 源文件的名称应该和 public 类的类名保持一致。
● 如果一个类定义在某个包中,那么 package 语句应该在源文件的首行。
● 如果源文件包含 import 语句,那么应该放在 package 语句和类定义之间。如果没有 package 语句,那么 import 语句应该在源文件中最前面。
● import 语句和 package 语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。
Java包主要用来对类和接口进行分类。
Import语句用来提供一个路径,使得编译器可以找到某个类。
二、Java基本数据类型:
Java两大数据类型:内置数据类型和引用数据类型。
4.1、内置数据类型:
Java语言提供了8种基本类型:6种数字类型(4个整数型、2个浮点型)、1种字符类型和1中布尔型。
1、byte:byte 数据类型是8位、有符号的,以二进制补码表示的整数;最小值是 -128(-2^7);最大值是 127(2^7-1);默认值是 0;byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;
2、short:short 数据类型是 16 位、有符号的以二进制补码表示的整数;最小值是 -32768(-2^15);最大值是 32767(2^15 - 1);Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;默认值是 0;
3、int:int 数据类型是32位、有符号的以二进制补码表示的整数;最小值是 -2,147,483,648(-2^31);最大值是 2,147,483,647(2^31 - 1);一般地整型变量默认为 int 类型;默认值是 0 ;
4、long:long 数据类型是 64 位、有符号的以二进制补码表示的整数;最小值是 -9,223,372,036,854,775,808(-2^63);最大值是 9,223,372,036,854,775,807(2^63 -1);默认值是 0L;
5、float:float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;float 在储存大型浮点数组的时候可节省内存空间;默认值是 0.0f;
6、double:double 数据类型是双精度、64 位、符合 IEEE 754 标准的浮点数;浮点数的默认类型为 double 类型;默认值是 0.0d;
7、boolean:boolean数据类型表示一位的信息;只有两个取值:true 和 false;默认值是 false;
8、char:char 类型是一个单一的 16 位 Unicode 字符;最小值是 \u0000(十进制等效值为 0);最大值是 \uffff(即为 65535);char 数据类型可以储存任何字符。
数据类型 | 默认值 |
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | 'u0000' |
String (or any object) | null |
boolean | false |
4.2、引用类型:
引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型。变量一旦声明,类型不能被改变。对象、数组都是引用数据类型;所有引用类型的默认值都是null。
4.3、Java常量:
常量在程序运行时是不能被修改的。在Java中使用final关键字来修饰常量。当使用字面量的时候,前缀0表示8进制;前缀0x表示16进制。
Java语言支持一些特殊的转义字符序列:
符号 | 字符含义 |
\n | 换行 (0x0a) |
\r | 回车 (0x0d) |
\f | 换页符(0x0c) |
\b | 退格 (0x08) |
\0 | 空字符 (0x0) |
\s | 空格 (0x20) |
\t | 制表符 |
\" | 双引号 |
\' | 单引号 |
\\ | 反斜杠 |
\ddd | 八进制字符 (ddd) |
\uxxxx | 16进制Unicode字符 (xxxx) |
整型、常量、字符型数据可以混合运算,在运算中,不同类型的数据先转化为同一类型,然后进行运算。转换从低级到高级:
数据类型转换规则:不能对boolean类型进行类型转换;不能把对象类型转换成不相关类的对象;容量大的类型转换为容量小的类型必须使用强制类型转换;转换过程中可能导致溢出或损失精度;浮点数到整数的转换是通过舍弃小数得到,不是四舍五入。
二、Java变量类型:
在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式:type identifier [ = value][, identifier [= value] ...] ,其中:type --数据类型; identifier--是变量名,使用逗号“,”隔开。
Java语言支持的变量类型:局部变量、成员变量、静态变量、参数变量。
5.1、局部变量:
局部变量声明在方法、构造方法或者语句块中,执行完后,变量将会被销毁。局部变量必须在使用前声明,并且不能被访问修饰符修饰。局部变量只在声明它的方法、构造方法或者语句块中可见,不能被其他方法或代码块访问。局部变量是在栈上分配的。局部变量被声明后,必须进行初始化,才可以使用。
5.2、成员变量:
成员变量声明在一个类中,但在方法、构造方法和语句块之外。当一个对象被实例化后,每个成员变量的值就跟着确定。成员变量在对象创建时创建,在对象被销毁时销毁。成员变量的值应该至少被一个方法、构造方法或语句块引用。成员变量可以声明在使用前或使用后。访问修饰符可以修饰成员变量。成员变量对于类中的方法、构造方法或者语句块是可见的。一般应将成员变量设为私有。成员变量具有默认值。成员变量可以直接用过变量名访问。
5.3、静态变量:
Java中的静态变量是指在类中定义的一个变量,它与类相关而不与实例相关,即无论创建多少个类实例,静态变量在内存中只有一份拷贝,被所有实例共享。静态变量在类加载时被创建,在整个程序运行期间都存在。
静态变量的定义方式是在类中使用static关键字修饰变量。静态变量的访问可以通过类名来访问也可通过实例名来访问。
静态变量的应用场景:存储全局状态或配置信息;计数器或同级信息;缓存数据或共享资源;工具类的常量或方法;单例模式中的实例变量。
5.4、参数变量:
参数变量是指在方法或构造函数中声明的变量,用于接收传递给方法或构造函数的值。参数变量只在方法或构造函数被调用时存在,并且只能在方法或构造函数内部使用。示例:
public class RunTest {
public static void main(String[] args) {
int a = 10, b = 20;
swap(a, b); // 调用swap方法
System.out.println("a = " + a + ", b = " + b); // 输出a和b的值
}
public static void swap(int x, int y) {
int temp = x;
x = y;
y = temp;
}
}