- 浏览: 319290 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (221)
- J2SE心得 (4)
- 经典帖子 (8)
- 亲身经历 (9)
- SSH框架 (12)
- 数据库 (10)
- java基础知识 (41)
- java解惑 (17)
- 软件测试 (0)
- JSP (6)
- JavaScript (8)
- jQuery学习 (12)
- 硬件知识 (1)
- 工具类 (14)
- 面试专题 (4)
- Struts2专题(学习) (14)
- Spring源码分析专题(学习) (15)
- JavaScript专题(学习) (8)
- ExtJs专题(学习) (6)
- Java Web快速入门——全十讲 (10)
- web前台 (1)
- J2ME手机方面 (1)
- 积累整理 (1)
- MyEclipse工具篇 (10)
- oracle (1)
- Android基础 (1)
最新评论
-
youjianbo_han_87:
上传成功后,无法跳转到success页面,会报2038和404 ...
Struts2使用FlashFileUpload.swf实现批量文件上传 -
showzh:
...
MyEclipse 怎么安装SVN插件 -
wpf523:
赞一个啊,楼主加油
一些比较复杂的运算符(二) -
独步天下:
request.getSession().getAttribute() 和request.getSession().setAttribute() -
HelloJava1234:
thank you
怎么改变MyEclipse默认的jsp打开方式
局部内部类
局部内部类是定义在方法中的内部类。
局部内部类不能够加权限修饰符,其范围为定义它的代码块。
注意:局部内部类不仅可以访问外部类私有实例变量,还可以访问外部类的局部常量(也就是局部变量必须为final的)
局部内部类的特点:不能直接访问局部内部类(保证局部内部类对外是不可见的),只有在方法中才能访问其局部内部类。
局部内部类的作用
通过内部类和接口达到一个强制的弱耦合,用局部内部类来实现接口,并在方法中返回接口类型,使局部内部
类不可见,屏蔽实现类的可见性。
局部内部类写法
public class TestLocalInnerClass{ public static void main(String[] args){ Outer o=new Outer(); final int a=9; o.print(a); } } class Outer{ private int index=100; public void print(final int a){ final int b=10; System.out.println(a); class Inner{ public void print(){ System.out.println(index); System.out.println(a); System.out.println(b); } } Inner i=new Inner(); i.print(); } }
结果为:
9
100
9
10
匿名内部类
匿名内部类是一种特殊的局部内部类,可通过匿名类隐式的实现接口。
匿名内部类的特点:
1,一个类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的事先或是覆盖。
2,只是为了获得一个对象实例,不许要知道其实际类型。
3,类名没有意义,也就是不需要使用到。
注:一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类,没有类名,根据多态,我们使用其父类名。
匿名内部类的特点
1) 因其为局部内部类,那么局部内部类的所有限制都对其生效。
2) 匿名内部类是唯一一种无构造方法类。
3)大部分匿名内部类是用于接口回调用的。
4)匿名内部类在编译的时候由系统自动起名Out$1.class。
5)一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。
6)因匿名内部类无构造方法,所以其使用范围非常的有限。
匿名内部类和局部内部类的区别
需要返回多个对象时,使用局部内部类,局部内部类的应用相对较多。匿名内部类中不写构造方法。
匿名内部类的写法:
interface A{ void ia(); } class B{ public A bc(){ return new A{ void ia(){ System.out.println(“ia”) } }; } }
使用匿名内部类:
public class Test{ public static void main(String[] args){ B b=new B(); A a=b.bc(); a.ia(); } }
Exception(例外/异常)
对于程序可能出现的错误应该做出预案。
异常是程序中所有出乎意料的结果。(关系到系统的健壮性)
JAVA会将所有的异常封装成为一个对象,其根本父类为Throwable。
异常的分类
Throwable有两个子类:Error和Exception。
Error对象表示程序错误,是底层的、低级的、不可恢复的严重错误。此时程序一定会退出,已经失去了运行所必须的物理环境。对于Error错误无法进行处理。因为我们是通过程序来应对错误,可是程序已经退出了,就无法处理了。
我们可处理的只是Exception类的对象表示的程序异常(例外/异常)。
Exception有两个子类:Runtime exception:(未检查异常)可以在编程时避免,可处理可不处理
非Runtime exception:(已检查异常)必须进行处理。
注意:无论是未检查异常还是已检查异常在编译的时候都不会被发现,在编译的过程中检查的是程序的语法错
误,而异常是一个运行时程序出错的概念。
未检查异常是因程序员没有进行必要的检查,因疏忽和错误而引起的异常。属于虚拟机内部的异常(比如空指针)。
应对未检查异常就是养成良好的检查习惯。
已检查异常是不可避免的,对于已检查异常必须事先定义好处理方法。
已检查异常是跨越出了虚拟机的范围外的异常。(比如“未找到文件”)
异常的传递
如何处理已检查异常(对于所有的已检查异常都要进行处理):
首先了解异常形成的机制:
一个方法中有一条语句出现了异常,会throw(抛出)一个例外对象(throw 异常对象),其后的语句不会执行并将异常返回给上一级方法,上一级方法接受到了例外对象后,可能对这个异常进行处理,也可能将这个异常继续向上传递。
注意:当一个方法中出现了异常,没有进行异常处理,方法就会把异常对象作为返回值返回。如果有异常进入
虚拟机,那么虚拟机就会立刻中止程序的执行。
异常的处理方式
非RuntimeException 已检查异常必须处理,不处理编译不通过。
已检查异常处理方式:throws和try..catch(...){}方法。
注意:抛异常的方法可能是JDK定义的,也可能是程序员写的程序,无论谁写的,抛出一定用throw。方法的定义中声明方法可能抛出的异常,用(throws 异常类名,异常类名) ,声明这个方法不处理异常,把异常交给上一级方法处理。可以抛出的是实际产生异常或其父类的异常对象。
例:public void print() throws Exception{}
对于方法a,定义了throws Exception。它调用的方法b返回异常对象时,方法a并不处理,将这个异常对象向上一级返回,
所有的方法均不进行处理,异常返回到主方法,程序会中止。(要避免所有的方法都向上级抛异常,因为这样出现一个很小的异常就会令程序中止)。
throws(抛)异常时,可以使用多态,一个方法声明抛出异常时,调用这个方法的方法就要处理该异常(已检查异常),要么抛出一个兼容类型的异常(调用的方法抛出异常的父类或者是相同类型)
例:
public class Test{ public static void main(String[] args)throws Exception{ Test t=new Test() t.a() } public void a()throws IOException,EOFException{ b(); …… } public void b()throws EOFException{ …… } }
在方法的程序中有一行throw new Exception(),抛出异常,其后的程序不再执行。异常对象抛出后,后面的程序没有执行机会,JAVA认为异常出现后的程序没有存在的必要。
try..catch捕获异常
对于try……catch格式:
try {
可能出现错误的代码块
}catch(Exception e){
进行处理的代码
}
用这种方法,代码正确,程序不经过catch语句直接向下运行;
代码不正确,则将抛出的异常对象和e的类型进行匹配,匹配成功,运行相应异常处理代码即catch块中代码。
(用Exception来声明e的话,Exception为所有异常对象的父类,所有肯定匹配成功)。处理完代码后这个例外就完全处理
完毕,程序会接着捕获异常的catch块的地方向下执行,最后程序正常退出。
try块中的代码如果没有出现异常,就会跳过catch,正常执行。
try块中抛出了异常,即跳出try块去匹配catch块,try块中抛出异常之后的语句不会执行,在try块中不能写return语句。
一个try块可以跟多个catch块,用于处理不同情况。一个try块中抛出异常后只匹配一个和处理抛出类型异常兼容
的catch块。
我们可以写多个catch块,不能将声明处理try块中抛出实际异常类型的父类型异常的catch块,写在声明处理try块中抛出的
实际类型异常的catch块之前。
try块中抛出的异常,先匹配处理其实际异常类型的父类型的catch块,处理抛出实际类型异常的catch块成了永远不会被执行
的代码,java中是不允许写这样的代码,编译不通过。
例:
EOFException是IOException的子类,以下写法是错误的,编译不通过
try{ …… }catch(IOException e){ …… }catch(EOFException ex){ …… }
发表评论
-
java 的split的用法
2010-01-20 13:05 1811Java split用法 java.lang.string.s ... -
java简介以及了解java(三六)
2009-08-14 14:50 824*1: 名为DoCallStuff类实现了Callable,S ... -
java简介以及了解java(三五)
2009-08-14 14:49 1141处理自定义注释的类例: import java.lang.r ... -
java简介以及了解java(三四)
2009-08-14 14:45 847JAVA5.0 的注释(Annotation) ... -
java简介以及了解java(三三)
2009-08-14 14:42 970泛型方法的定义把数组拷贝到集合时,数组的类型一定要和集合的泛型 ... -
java简介以及了解java(三二)
2009-08-14 14:40 733java5.0中的泛型说明增强了java的类型安全,可以在编译 ... -
java简介以及了解java(三一)
2009-08-14 14:38 940可变长的参数在java5.0中,可以使用一种变长参数,也就是例 ... -
java简介以及了解java(三十)
2009-08-14 14:37 795Java5.0的新特性自动装箱和自动拆箱自动封箱和自动拆箱,它 ... -
java简介以及了解java(二九)
2009-08-14 14:35 826反射反射,在运行时,动态分析或使用一个类进行工作。类对象,是一 ... -
java简介以及了解java(二八)
2009-08-14 14:33 893UDP socket这种信息传输方 ... -
java简介以及了解java(二七)
2009-08-14 14:32 829JAVA网络编程网络基础知识网络编程的目的就是指直接或间接地通 ... -
java简介以及了解java(二六)
2009-08-14 14:29 818ObjectInputStream和ObjectOutputS ... -
java简介以及了解java(二五)
2009-08-14 14:28 934BufferInputStream和BufferOutputS ... -
java简介以及了解java(二四)
2009-08-14 14:27 758Java中的I/O使用I/O流访问file中的内容。JVM与外 ... -
java简介以及了解java(二三)
2009-08-14 14:24 678基本输入输出所使用的类的介绍:FileInputStream和 ... -
java简介以及了解java(二二)
2009-08-14 14:23 740处理跨平台性对于命令 ... -
java简介以及了解java(二一)
2009-08-14 14:22 869死锁问题多线程不释放 ... -
java简介以及了解java(二十)
2009-08-14 14:21 859共享数据的并发处理多线程同时并发访问的资源叫做临界资源。多个线 ... -
java简介以及了解java(十九)
2009-08-14 14:19 800Java多线程编程进程,即运行中的程序,多任务操作系统中并发的 ... -
java简介以及了解java(十八)
2009-08-14 14:17 695在Java的图形编程中,所有动作(事件)都已经提供了相应的事件 ...
相关推荐
1. **Java简介**:Java是由Sun Microsystems开发的,后来被Oracle公司收购。它被设计成“一次编写,到处运行”,这意味着编写的代码可以在任何支持Java的平台上运行,无需重新编译。 2. **Java环境搭建**:学习如何...
接下来,了解Java的基础语法是关键。这包括: 1. **基本数据类型**:如整型(byte, short, int, long)、浮点型(float, double)、字符型(char)和布尔型(boolean)。 2. **变量**:声明和初始化变量,理解其作用...
* Java开发职业发展道路:了解Java开发职业的发展道路,如从初级开发到高级开发的发展过程。 * Java开发职业规划:了解Java开发职业的规划,如职业发展目标、职业发展方向等。 * Java开发职业技能:了解Java开发职业...
这里不仅有Java基础知识的详细介绍,还有高级特性的深入解析,是Java开发者深入了解Java内部机制的首选之地。 ### 2. CN-Java 网址:http://www.cn-java.com/ CN-Java是一个专注于Java技术的中文社区,提供了丰富...
下面我们将详细探讨Java2Pas的工作原理、使用方法以及其在IT领域的应用。 首先,Java和Delphi是两种不同的编程语言,它们有着不同的语法结构和编程模型。Java是一种面向对象的语言,由Sun Microsystems(现已被...
通过阅读《Java核心编程思想》,读者不仅能全面掌握Java语言,还能了解到许多最佳实践和设计模式,从而在实际项目开发中游刃有余。这本书的2010最新版可能还包含了Java新特性的介绍,比如Java 7和8的Lambda表达式、...
"java脚本 快速学习"的压缩包可能包含了各种教程、示例代码和练习,帮助初学者快速掌握Java中的脚本使用和JavaScript的基本语法。建议从以下几个方面入手: 1. 学习JSAPI的使用方法,了解ScriptEngine接口和...
Java 8快速入门教程为有一定Java基础的读者提供了一个指南,帮助他们快速了解并应用Java 8的新特性。无论你是想通过实践学习如何使用新的日期时间API,还是想掌握函数式编程的核心概念,本文都可以作为你的起点。...
《韩顺平30天学Java》是一门针对初学者设计的Java编程课程,旨在帮助学员在短短一个月的时间内掌握Java编程基础。该课程由知名IT教育专家韩顺平教授,以其独特的教学风格和深入浅出的讲解方式,使得复杂的编程概念变...
对于初学者来说,这是了解Java API的起点。 2. **类和接口**:这是文档的主体部分,详细列出了Java平台提供的所有类和接口。每个条目都包含了类或接口的定义、构造方法、方法、常量等详细信息。例如,`java.lang....
了解Matomo Java Tracker有助于提升Java开发者在Web分析领域的专业技能,对于面试来说,可以展示对用户行为跟踪、数据分析以及如何将这些知识应用于实际项目的能力。以下是一些可能的面试问题: 1. 如何使用Matomo ...
首先,我们需要了解Java数据库连接(JDBC)API,这是Java与数据库交互的标准接口。Java通过JDBC驱动程序与特定数据库通信。对于Sybase SQL Anywhere,我们需要的是对应的JDBC驱动,这里提供的`jconn3.jar`就是Sybase...
1. **Java语言概述**:了解Java的历史、特性以及其在软件开发中的应用。Java是由Sun Microsystems的詹姆斯·高斯林(James Gosling)在1995年创建的,现在由Oracle公司维护。它的主要特点包括平台无关性(Write Once...
在IT行业中,视频压缩是一项重要的技术,特别是在大数据和互联网传输领域。Java作为一种广泛使用的编程语言,也提供了多种方法来处理视频压缩。...对于想要深入这一领域的开发者来说,了解并实践这些技术是十分必要的。
1. **Java简介**:介绍Java的历史、特点以及其在软件开发中的应用领域。Java由Sun Microsystems的詹姆斯·高斯林(James Gosling)于1995年推出,其设计目标是“一次编写,到处运行”。 2. **环境搭建**:讲解如何...
为了充分利用这些新功能,开发者需要了解Java 11的API文档,学习新的编程模式和最佳实践。 在实际开发中,Java 11可用于构建各种类型的应用,如Web应用、桌面应用、移动应用(Android)以及大数据处理等。使用IDE如...
#### Java语言简介与发展历程 Java作为一种重要的编程语言,在计算机科学领域有着广泛的应用。由标题“第一章认识Java”以及描述中的“Java发展”,我们可以从中提炼出关于Java的基本信息及其发展历程的关键点。 #...
【标题】"第一行代码Java源代码第1章课程代码Java简介共1" 指的是一个关于Java编程语言入门的教程,源自郭霖的畅销书《第一行代码——Java》的第一章。这个标题暗示了内容可能涵盖了Java编程的基础概念,可能是为了...
对于开发者而言,了解并掌握Java 11的新特性有助于提升开发效率,同时也能确保应用的安全性和稳定性。如果你正在寻找一个快速、简便的方式来获取和安装Java 11,这个压缩包将是一个很好的选择。记得在使用前确认你的...