Java基础课程培训.ppt
《Java基础课程培训.ppt》由会员分享,可在线阅读,更多相关《Java基础课程培训.ppt(60页珍藏版)》请在三一办公上搜索。
1、Java基础,褚蕊蕊2011-6-16,Agenda,Java初级Java进阶Q&A,Java初级,Java数据类型常用类String、StringBuild、StringBuffer、BigDecimal异常处理,Java数据类型,概念:数据类型就是对内存位置的抽象表达,数据类型指明了变量或表达式的状态和行为。分类:简单数据类型、复合数据类型简单数据类型:简单数据类型是不能再简化的、内置的数据类型,由编程语言定义,表示真实的数字、字符和整数。例如实数、整数、字符和布尔值。复合数据类型:由简单数据类型的组合形成的更大、更复杂的数据类型。例如类、接口、数组。,简单数据类型与复合数据类型的区别,栈
2、:由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常为局部变量,函数参数。特点:后进先出(Last-In/First-Out)。堆:由new分配的内存块,他们的释放编译器不用去管,程序结束后,操作系统自动回收。特点:顺序随意Java内存分配形式:栈内存,堆内存。栈与堆都是Java用来在Ram中存放数据的地方。与C+不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。简单数据类型,不存在“引用”的概念,都是直接存储在内存中的内存栈上,数据本身的值就是存储在栈空间里。Java语言中八种基本数据类型都是这样存储的。,简单数据类型与复合数据类型的区别,继承Object
3、类的复杂数据类型都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种数据类型的存储,简单的讲,“引用”是存储在有序的内存栈上的,而对象本身的值存储在内存堆上。,基本数据类型,布尔数据类型(boolean),1位字符类型(char),2 字节整数类型(integer)byte 1字节short 2字节int 4字节long 8字节浮点数类型(float)float 4字节double 8字节,基本数据类型的转换,自动转换当一个较“小”的数据和较“大”的数据一起运算时,系统会自动把较“小”的数据转换为较“大”的数据,再进行运算。自动类型转换图:bytesho
4、rt(char)intlongfloatdouble条件:类型兼容;目的类型的数值范围比源类型大;强制转换将较“大”的数据转换为较“小”的数据时,可以使用强制类型转换。如:int a=(int)3.14自动类型转换反序注意:转换附加,char与int类型的转换,如:int a=(int)a;输出a的ASCII码 97,基本数据类型的包装类,Java是一种面向对象语言,java中的类把方法与数据连接在一起,并构成了自包含式的处理单元。但在Java中不能定义基本类型(primitive type),为了能将基本类型视为对象来处理,并能连接相关的方法,Java为每个基本类型都提供了包装类。包装类:B
5、oolean,Byte,Short,Character,Integer,Long,Float,Double,注意,在Java语言中,字符串没有被当做数组,而是被当做对象来处理的,类String和StringBuffer都可以被用来表示一个字符串。Java语言不支持C、C+中的指针类型、结构类型、枚举类型和联合类型。Java语言中所有简单数据类型的所在内存位数都是固定的。Java语言没有提供无符号整数类型。Java语言的short数据类型很少使用,因为它限制数据有存储为先高字节,后低字节,这样在某些机器中会出错。默认的浮点类型是双精度(double),要想要一个float必须在浮点数后面加F或者
6、f。,注意,默认的整数类型是int型,要想使用长整型可在后面加“l”或“L”,如:1000L(小写l容易被误认为1,不推荐用)float可以精确到7位有效数字,第8位的数字是第9位数字四舍五入上取得的;double可以精确到16位有效数字,第17位的数字是第18位数字四舍五入上取得的。如果要求精确的答案,请不要使用float和double,因为它们是为了在广域数值范围上提供较为精确的快速近似运算而精心设计的。然而,它们没有提供完全精确的结果。尤其是对货币计算尤为不适合,使用BigDecimal。BigInteger支持任意精度的整数。BigDecimal支持任意精度的定点数。浮点型转化为整型时
7、,不进行四舍五入,直接截断小数点后面的数。,注意,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已经是
8、 int型了!切记!,数值计算实例,常用类,StringStringBufferStringBuildBigDecimal,String,String是Java中的字符串,用双引号引起来的几个字符,不属于8种基本数据类型,它是一个对象。默认值为null 注:String类是不可变(final)的,对String类的任何改变,都是返回一个新的String类对象.这样的话把String类的引用传递给一个方法,该方法对String的任何改变,对原引用指向的对象没有任何影响,这一点和基本数据类型相似.创建String对象:String s1=ABCD;String s2=new String(ABCD
9、);注:new String()和new String(“”)都是申明一个新的空字符串,是空串不是nullString str=”kvill”;String str=new String(“kvill”);的区别常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。,String,例1:String s0=”kvill”;String s1=”kvill”;String s2=”kv”+“ill”;System.out.println(s0=s1);System.out.println(
10、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=”kvi
11、ll”;String s1=new String(”kvill”);String s2=”kv”+new String(“ill”);System.out.println(s0=s1);falseSystem.out.println(s1=s2);falseSystem.out.println(s0=s2);false解析:s0还是常量池中”kvill”的引用,s1因为无法在编译期确定,所以是运行时创建的新对象”kvill”的引用,s2因为有后半部分new String(“ill”)所以也无法在编译期确定,所以也是一个新创建对象”kvill”的引用。因为每个字符串为一个对象,比较的是他们的引用
12、地址,在堆分配的地址肯定是不一样的。,String,关于equals()和=这个对于String简单来说就是比较两字符串的Unicode序列是否相当,如果相等返回true;而=是比较两字符串的地址是否相同,也就是是否是同一个字符串的引用。关于String是不可变的 String 对象称为不可变的(只读),因为一旦创建了该对象,就不能修改该对象的值。看来似乎修改了 String 对象的方法实际上是返回一个包含修改内容的新 String 对象。比如说:String str=”kv”+”ill”+”“+”ans”;就是有4个字符串常量,首先”kv”和”ill”生成了”kvill”存在内存中,然后”k
13、vill”又和”“生成”kvill“存在内存中,最后又和生成了”kvill ans”;并把这个字符串的地址赋给了str,就是因为String的“不可变”产生了很多临时变量,这也就是为什么建议用StringBuffer的原因了,因为StringBuffer是可改变的。String的常用方法,见API,StringBuffer,Java.lang.StringBuffer线程安全的可变字符序列。String和StringBuffer他们都可以存储和操作字符串,即包含多个字符的字符串数据。String类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的
14、。构造方法 public StringBuffer()创建一个空的StringBuffer类的对象,默认构造器,由系统自动分配容量,默认是16个字符。public StringBuffer(int length)创建一个长度为 参数length 的StringBuffer类的对象。如果参数length小于0,将触发NegativeArraySizeException异常。public StringBuffer(String str)用一个已存在的字符串常量来创建StringBuffer类的对象。,StringBuffer类的方法,StringBuffer类的方法,StringBuffer类的方
15、法,StringBuilder,一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。,BigDecimal,BigDecimal支持任意精度的定点数。用来对浮点数类型数据进行精确的运算。常见方法见APIBigDecimal的格式化 由于NumberFormat类的format()方法可以使用BigDecimal对象作为其参数,可以利用BigDecimal对超出1
16、6位有效数字的货币值,百分值,以及一般数值进行格式化控制。NumberFormatcurrency=NumberFormat.getCurrencyInstance();NumberFormatpercent=NumberFormat.getPercentInstance();currency.format(amount)percent.format(rate),异常处理,简介Java异常类的层次结构Java 异常处理的分类Java异常的处理方式Java 异常处理的原则和忌讳,Java异常及异常处理,Java 异常处理是使用 Java 语言进行软件开发和测试脚本开发时不容忽视的问题之一,是否进
17、行异常处理直接关系到开发出的软件的稳定性和健壮性。可将 Java 异常看作是一类消息,它传送一些系统问题、故障及未按规定执行的动作的相关信息。异常包含信息,以将信息从应用程序的一部分发送到另一部分。编译语言为何要处理异常?为何不在异常出现位置随时处理具体故障?因为有时候我们需要在系统中交流错误消息,以便按照统一的方式处理问题,有时是因为有若干处理问题的可能方式,但您不知道使用哪一种,此时,可将处理异常的任务委托给调用方法的代码。调用者通常更能了解问题来源的上下文,能更好的确定恢复方式。,通用消息架构,从上图可以看出,必定在运行的 Java 应用程序的一些类或对象中产生异常。出现故障时,“发送者
18、”将产生异常对象。异常可能代表 Java 代码出现的问题,也可能是 JVM 的相应错误,或基础硬件或操作系统的错误。异常本身表示消息,指发送者传给接收者的数据“负荷”。首先,异常基于类的类型来传输有用信息。很多情况下,基于异常的类既能识别故障本因并能更正问题。其次,异常还带有可能有用的数据(如属性)。在处理异常时,消息必须有接收者;否则将无法处理产生异常的底层问题。,Java异常类的层次结构,在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)。Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性。Throwable 有两个重要的子
19、类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。Exception(异常)是应用程序中可能的可预测、可恢复问题。一般大多数异常表示中度到轻度的问题。异常一般是在特定环境下产生的,通常出现在代码的特定方法和操作中。如:当试图调用 readLine 方法时,可能出现 IOException 异常。Error(错误)表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。E
20、xception 类有一个重要的子类 RuntimeException。RuntimeException 类及其子类表示“JVM 常用操作”引发的错误。例如,若试图使用空值对象引用、除数为零或数组越界,则分别引发运行时异常(NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException。,Java 异常处理的分类,可检测异常可检测异常经编译器验证,对于声明抛出异常的任何方法,编译器将强制执行处理或声明规则,例如:sqlExecption 这个异常就是一个检测异常。你连接 JDBC 时,不捕捉这个异常,编译器就通不
21、过,不允许编译。非检测异常1、非检测异常不遵循处理或声明规则。在产生此类异常时,不一定非要采取任何适当操作,编译器不会检查是否已解决了这样一个异常。例如:一个数组为 3 个长度,当你使用下标为时,就会产生数组下标越界异常。这个异常 JVM 不会进行检测,要靠程序员来判断。有两个主要类定义非检测异常:RuntimeException 和 Error。自定义异常自定义异常是为了表示应用程序的一些错误类型,为代码可能发生的一个或多个问题提供新含义。可以显示代码多个位置之间的错误的相似性,也可以区分代码运行时可能出现的相似问题的一个或者多个错误,或给出应用程序中一组错误的特定含义。例如,对队列进行操作
22、时,有可能出现两种情况:空队列时试图删除一个元素;满队列时试图添加一个元素。则需要自定义两个异常来处理这两种情况。,Java异常的处理方式,在 Java 应用程序中,对异常的处理有两种方式:处理异常和声明异常。处理异常:try、catch 和 finally代码结构:try xxx;catch(Exception)finally 其中:try 块:将一个或者多个语句放入 try 时,则表示这些语句可能抛出异常。编译器知道可能要发生异常,于是用一个特殊结构评估块内所有语句。catch 块:当问题出现时,一种选择是定义代码块来处理问题,catch 块的目的便在于此。catch 块是 try 块所产
23、生异常的接收者。基本原理是:一旦生成异常,则 try 块的执行中止,JVM 将查找相应的 JVM。finally 块:无论运行 try 块代码的结果如何,无论是否运行完,无论是否产生异常,也无论是否在 catch 块中得到处理,finally 块都将执行。,try-catch-finally 规则,必须在 try 之后添加 catch 或 finally 块。try 块后可同时接 catch 和 finally 块,但至少有一个块。必须遵循块顺序:若代码同时使用 catch 和 finally 块,则必须将 catch 块放在 try 块之后。catch 块与相应的异常类的类型相关一个 try
24、 块可能有多个 catch 块。若如此,则执行第一个匹配块。可嵌套 try-catch-finally 结构。在 try-catch-finally 结构中,可重新抛出异常。除了下列情况,总将执行 finally 做为结束:JVM 过早终止(调用 System.exit(int));在 finally 块中抛出一个未处理的异常;计算机断电、失火、或遭遇病毒攻击。,声明异常,若要声明异常,则必须将其添加到方法签名块的结束位置。例:public void readMethod(int input)throws java.io.IOException 声明异常的规则如下:1、必须声明方法可抛出的任何
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 基础 课程 培训

链接地址:https://www.31ppt.com/p-5019970.html