Java基础课程培训
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
注意
• 在Java语言中,字符串没有被当做数组,而是被当做对 象来处理的,类String和StringBuffer都可以被用来表示 一个字符串。 • Java语言不支持C、C++中的指针类型、结构类型、枚 举类型和联合类型。 • Java语言中所有简单数据类型的所在内存位数都是固定 的。 • Java语言没有提供无符号整数类型。 • Java语言的short数据类型很少使用,因为它限制数据有 存储为先高字节,后低字节,这样在某些机器中会出错。 • 默认的浮点类型是双精度(double),要想要一个float 必须在浮点数后面加F或者f。
• 创建String对象: String s1 = "ABCD"; String s2 = new String("ABCD");
注:new String()和new String(“”)都是申明一个新的空字符串,是空串不 是null
• String str=”kvill”; String str=new String (“kvill”);的区别 常量池(constant pool)指的是在编译期被确定,并被保 存在已编译的.class文件中的一些数据。它包括了关于 类、方法、接口等中的常量,也包括字符串常量。
Java基础
褚蕊蕊 2011-6-16
Agenda
• Java初级 • Java进阶 • Q&A
Java初级
• Java数据类型 • 常用类String、StringBuild、StringBuffer、BigDecimal • 异常处理
Java数据类型
• 概念:数据类型就是对内存位置的抽象表达,数据类型 指明了变量或表达式的状态和行为。 • 分类:简单数据类型、复合数据类型 • 简单数据类型:简单数据类型是不能再简化的、内置的 数据类型,由编程语言定义,表示真实的数字、字符和 整数。例如实数、整数、字符和布尔值。 • 复合数据类型:由简单数据类型的组合形成的更大、更 复杂的数据类型。例如类、接口、数组。
String
例1:String s0=”kvill”; String s1=”kvill”; String s2=”kv” + “ill”; System.out.println( s0==s1 ); System.out.println( s0==s2 ); 结果为:true,true 解析:首先Java会确保一个字符串常量只有一个拷贝。因为例子中的s0和s1中的”kvill” 都是字符串常量,它们在编译期就被确定了,所以s0==s1为true;而”kv”和”ill”也 都是字符串常量,当一个字符串由多个字符串常量连接而成时,它自己肯定也是字 符串常量,所以s2也同样在编译期就被解析为一个字符串常量,所以s2也是常量池 中 ”kvill”的一个引用。所以s0==s1==s2; 用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的 字符串不放入常量池中,它们有自己的地址空间。 例2: String s0=”kvill”; String s1=new String(”kvill”); String s2=”kv” + new String(“ill”); System.out.println( s0==s1 ); false System.out.println( s1==s2 ); false System.out.println( s0==s2 ); false 解析:s0还是常量池中”kvill”的引用,s1因为无法在编译期确定,所以是运行时创建的 新对象”kvill”的引用,s2因为有后半部分new String(“ill”)所以也无法在编译期确定, 所以也是一个新创建对象”kvill”的引用。因为每个字符串为一个对象,比较的是他 们的引用地址,在堆分配的地址肯定是不一样的。
StringBuffer类的方法
StringBuffer类的方法
StringBuffer类的方法
StringBuilder
• 一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用 作 StringBuffer 的一个简易替换,用在字符串缓冲区被 单个线程使用的时候。如果可能,建议优先采用该类, 因为在大多数实现中,它比 StringBuffer 要快。
注意
• Java为所有的成员变量提供了默认初始化:byte、short 、 int、long--0 float--0.0f double--0.0 boolean-false char--‘“u0000’,对象类型的引用全被初始化为null。 • 各种基本数据类型进行混合运算,结果会是表达能力最 强的那种。如:int和long运算,结果是long,整型和浮 点型运算结果是浮点型。特殊的一点是:只要类型比int 小(如char、byte、short),那么在运算之前,这些值 会自动地转换成int。如: byte b1 = 12; byte b2 = b1 + 1; //在编译时出错了!因为b1+1已经是 int型了!切记!
String
• 关于equals()和==
这个对于String简单来说就是比较两字符串的Unicode序列是否相当,如果 相等返回true;而==是比较两字符串的地址是否相同,也就是是否是同一个 字符串的引用。
• 关于String是不可变的
String 对象称为不可变的(只读),因为一旦创建了该对象,就不能修改 该对象的值。看来似乎修改了 String 对象的方法实际上是返回一个包含修 改内容的新 String 对象。 比如说:String str=”kv”+”ill”+” “+”ans”; 就是有4个字符串常量,首先”kv”和”ill”生成了”kvill”存在内存中,然 后”kvill”又和” “ 生成 ”kvill “存在内存中,最后又和生成了”kvill ans”; 并把这个字符串的地址赋给了str,就是因为String的“不可变”产生了很多 临时变量,这也就是为什么建议用StringBuffer的原因了,因为StringBuffer 是可改变的。
简单数据类型与复合数据类型的区别
• 栈:由编译器在需要的时候分配,在不需要的时候自动清 除的变量的存储区。里面的变量通常为局部变量,函数参 数。特点:后进先出(Last-In/First-Out)。 • 堆:由new分配的内存块,他们的释放编译器不用去管, 程序结束后,操作系统自动回收。特点:顺序随意 • Java内存分配形式:栈内存,堆内存。栈与堆都是Java用 来在Ram中存放数据的地方。与C++不同,Java自动管理 栈和堆,程序员不能直接地设置栈或堆。 • 简单数据类型,不存在“引用”的概念,都是直接存储在 内存中的内存栈上,数据本身的值就是存储在栈空间里。 Java语言中八种基本数据类型都是这样存储的。
• String的常用方法,见API
StringBuffer
• Java.lang.StringBuffer线程安全的可变字符序列。 • String和StringBuffer他们都可以存储和操作字符串,即 包含多个字符的字符串数据。String类是字符串常量, 是不可更改的常量。而StringBuffer是字符串变量,它的 对象是可以扩充和修改的。 • 构造方法
数值计算实例
常用类
• • • • String StringBuffer StringBuild BigDecimal
String
• String是Java中的字符串,用双引号引起来的几个字符, 不属于8种基本数据类型,它是一个对象。默认值为null
注:String类是不可变(final)的,对String类的任何改变,都是返回一个新的 String类对象.这样的话把String类的引用传递给一个方法,该方法对String的 任何改变,对原引用指向的对象没有任何影响,这一点和基本数据类型相似.
– – – – byte 1字节 short 2字节 int 4字节 long 8字节
• 浮点数类型(float)
– float 4字节 – double 8字节
基本数据类型的转换
• 自动转换
– 当一个较“小”的数据和较“大”的数据一起运算时,系统会 自动把较“小”的数据转换为较“大”的数据,再进行运算。 – 自动类型转换图:byteshort(char)intlongfloatdouble – 条件:类型兼容;目的类型的数值范围比源类型大;
注意
• 默认的整数类型是int型,要想使用长整型可在后面加“l” 或“L”,如:1000L(小写l容易被误认为1,不推荐用) • float可以精确到7位有效数字,第8位的数字是第9位数 字四舍五入上取得的;double可以精确到16位有效数字, 第17位的数字是第18位数字四舍五入上取得的。 • 如果要求精确的答案,请不要使用float和double,因为 它们是为了在广域数值范围上提供较为精确的快速近似 运算而精心设计的。然而,它们没有提供完全精确的结 果。尤其是对货币计算尤为不适合,使用BigDecimal。 • BigInteger支持任意精度的整数。BigDecimal支持任意 精度的定点数。 • 浮点型转化为整型时,不进行四舍五入,直接截断小数 点后面的数。
currency.format(amount) percent.format(rate)
• 强制Βιβλιοθήκη Baidu换
– 将较“大”的数据转换为较“小”的数据时,可以使用强制类 型转换。如:int a = (int)3.14 – 自动类型转换反序
• 注意:转换附加,char与int类型的转换,如:int a = (int)’a’;输出’a’的ASCII码 97
基本数据类型的包装类
• Java是一种面向对象语言,java中的类把方法与数据连 接在一起,并构成了自包含式的处理单元。但在Java中 不能定义基本类型(primitive type) ,为了能将基本类型 视为对象来处理,并能连接相关的方法, Java为每个基 本类型都提供了包装类。 • 包装类: Boolean,Byte,Short,Character,Integer,Long,Float,Doub le
简单数据类型与复合数据类型的区别
• 继承Object类的复杂数据类型都是按照 Java里面存储对象的内存模型来进行数据 存储的,使用Java内存堆和内存栈来进行 这种数据类型的存储,简单的讲,“引用 ”是存储在有序的内存栈上的,而对象本 身的值存储在内存堆上。
基本数据类型
• 布尔数据类型 (boolean), 1位 • 字符类型 (char) ,2 字节 • 整数类型(integer)
public StringBuffer() 创建一个空的StringBuffer类的对象,默认构造器,由 系统自动分配容量,默认是16个字符。 public StringBuffer( int length )创建一个长度为 参数length 的StringBuffer 类的对象。如果参数length小于0,将触发NegativeArraySizeException异 常。 public StringBuffer( String str )用一个已存在的字符串常量来创建 StringBuffer类的对象。
BigDecimal
• BigDecimal支持任意精度的定点数。用来对浮点数类型 数据进行精确的运算。 • 常见方法见API • BigDecimal的格式化
由于NumberFormat类的format()方法可以使用BigDecimal对象作为其参 数,可以利用BigDecimal对超出16位有效数字的货币值,百分值,以及一 般数值进行格式化控制。 NumberFormat currency = NumberFormat.getCurrencyInstance(); NumberFormat percent = NumberFormat.getPercentInstance();