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

第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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值