您的位置:首页 > 编程语言 > Java开发

Java面向对象编程-第3章学习笔记

2015-11-02 04:35 337 查看

第3章 数据类型和变量

Java中数据类型分为基本类型和引用类型。基本类型包括数值类型(整型、浮点、字符)和boolean型;引用类型包括类、接口和数组。

一、基本数据类型

1、boolean类型:布尔类型

取值只能是true或false,如:boolean isChinese=true;在JVM中用整数零表示false,用任意非零整数表示true,但这种表示方式对源程序是透明的(不可见),在源程序中不能用整数赋值给boolean型变量。

2、byte\short\int\long类型

3、char类型与字符编码

Java语言对字符采用Unicode字符编码。

*关于字符编码:常用的字符编码包括:(1)ASCII字符编码:美国信息互换标准代码,一共只能表示128个字符(只用了7位)。(2)ISO-8859-1字符编码:又称Latin-1,是ISO组织为西欧语言制定的编码,采用一个字节(8位),兼容ASCII码。(3)GB2312字符编码:包括了对简体中文字符的编码,共收录7445个字符,包括6763个汉字和682个其他符合,也与ASCII兼容。(4)GBK字符编码:是对GB2312的扩展,收录了21886个字符。(5)Unicode字符编码:由国际Unicode协会编制,收录了全世界所有语言文字的字符,有两种编码方案:a、用2个字节编码(Java即采用这种16位编码方案);b、用4个字节编码(实际只用31位,最高位必须为0)。(6)UTF字符编码:有些操作系统不支持Unicode,UTF提供了这种转换。

因此在Java中char型数值占据16位。

4、float和double类型:分别占4个字节和8个字节。

二、引用类型

引用类型包括:类、接口和数组。

对于JVM处理引用类型和基本类型变量的方式是不一样的:对于基本类型的变量,JVM会为其分配该数据类型对应的内存空间;而对于引用类型变量,它仅仅是一个指向堆区中某个实例的指针,其真正取值时为其实例存储的内存地址,而该实例(引用变量)到底占用多少内存空间取决于JVM的具体实现,这对于Java程序是透明的。

对于以下这个程序:

public class Sample{
int memberV1;
int memberV2=1;
int memberV3;
public Sample(){   //构造方法
memberV3=3;
}
public static void main(String[] args){
Sample obj=new Sample();
}
}


JVM在执行new()语句时步骤如下:

(1)为一个新的Sample对象分配内存空间,其所有成员变量也都被分配了内存,并自动初始化为各成员变量对应数据类型的默认值。(memberV1=0;memberV2=0;memberV3=0)

(2)显式初始化memberV2=1;其余变量不变;

(3)调用构造方法显示初始化memberV3=3。

(4)将对象的引用赋给变量obj。

三、变量的作用域

1、变量的作用域即该变量所存在的范围,在该范围内,代码才可以访问到它。同时,作用域也决定了变量的生命周期,生命周期是指一个变量从被创建并分配其内存空间开始,到这个变量被销毁并清楚其所占内存的过程。按作用域,变量可分为一下类型:

(1)成员变量:在类中声明,其作用域为整个类。

(2)局部变量:在一个方法的内部其作用域是整个方法,在方法中的一个代码块的内部声明其作用域为这个代码块。

(3)方法参数:方法或构造方法的参数其作用域为整个方法或构造方法。

2、静态变量和实例变量的生命周期

类的成员变量有两种:对于被static修饰的变量称为类变量或静态变量;没有用static修饰的为实例变量。区别在于:

(1)类的静态变量在内存中只会有一个,在JVM加载类的过程中为静态变量在方法区中分配内存,被类的所有实例共享。静态变量可以直接通过类名访问,其生命周期取决于类的生命周期。

(2)类的每个实例都有相应的实例变量。当创建类的实例时,JVM在堆区中为实例变量分配内存空间,实例变量的生命周期取决于实例的生命周期。

类的静态变量可以通过”类名.静态变量名”或”实例对象.静态变量名”来访问,而实例变量只能通过其对应的实例对象来访问。

3、局部变量的生命周期

局部变量的生命周期取决于其所属的方法(何时调用及结束调用)。当JVM的某个进程调用一个方法时会为这个方法中的局部变量分配内存,当结束调用时则会结束这方法中局部变量的生命周期。

public class Sample{
int var1=1;   //实例变量
static int var2=2;  //静态变量

public int add(){
int var3=var1+var2;  //var3为局部变量
return var3;
}

public int delete(){
int var4=var1-var2;  //var4为局部变量
return var4;
}

public static void main(String[] args){
new Sample().add();
}
}


当执行该程序时,JVM先加载Sample类,并为其静态变量var2在方法区中分配内存空间,var2生命周期开始;然后执行main()中的new()方法创建Sample的实例对象,为其实例对象及其实例变量在堆区中分配内存空间,该实例对象的var1生命周期开始;再调用该实例的add()方法,在栈区为其局部变量var3分配内存空间,var3生命周期开始;执行完毕add()方法,结束局部变量var3生命周期,返回到main()方法;执行完毕main()方法结束实例对象及其实例变量var1的生命周期;再卸载Sample类,结束其静态变量var2的生命周期,JVM运行结束。

*对于和类成员变量同名的局部变量是可以存在的,在该局部变量生命周期存在时,该同名成员变量会被屏蔽,如果此时需要访问实例变量可以通过this关键字,这里this为对当前实例的引用。如果要访问类变量,可以通过类名来访问。

四、对象的默认引用:this

当一个对象创建后,JVM会给它分配一个引用自身的指针:this。一般以下情况会使用this关键字:

(1)在类的构造方法中使用;

(2)在一个实例方法中,前述实例变量与局部变量同名时,当实例变量被屏蔽时;

(3)在一个实例方法内,访问当前实例的引用。

四、思考题

1、17 3 17 9

2、b、c

3、d

4、a、c、d

5、2个

6、报错。

7、Mighty Mouse

8、10,40
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: