1. switch语句的用法
有人说:“笔者基础也太差了,switch都得说说?”是啊?哥们得说说啊,因为笔者基础确实自认比较差。试问,自从你学了分支语句后,你使用if else多啊?还是用switch的情况多啊?很肯定,很多人在开发中switch几乎没怎么用,使用if else不容易出错,之后就渐渐淡忘了switch的用法。现在咱们来复习一下。
public static void main(String[] args) {
int num = -1;
switch (num) {
case 5:
System.out.println("小学牛逼啊!经常作业得5分");
break;
case 4:
System.out.println("小学还行啊!经常作业得4分");
break;
case 3:
System.out.println("小学贪玩啊!经常作业得3分");
break;
case 2:
System.out.println("小学干嘛呢!经常作业得2分,坏学生");
break;
case 1:
System.out.println("小学胆子够大的!经常作业得1分");
break;
case 0:
System.out.println("小学牛逼啊!敢和老师叫板");
break;
default:
System.out.println("这孩子没上小学");
break;
}
}
switch中的字符是欲判断变量,下面的分支就根据此变量。每一个分支case代表了该变量的一种可能性,如果没有任何case符合,那么就进入default处理。每一个分支都有一个break,代表如果符合此分支的情况,处理完毕后会退出switch块。如果没有break,那么会继续往下面的case走,无论下面的case是否符合都会执行,直到遇到break或者整个switch块走完方才停止。
比如
int num = 3;
switch (num) {
case 5:
System.out.println("小学牛逼啊!经常作业得5分");
break;
case 4:
System.out.println("小学还行啊!经常作业得4分");
break;
case 3:
System.out.println("小学贪玩啊!经常作业得3分");
;
case 2:
System.out.println("小学干嘛呢!经常作业得2分,坏学生");
;
case 1:
System.out.println("小学胆子够大的!经常作业得1分");
;
case 0:
System.out.println("小学牛逼啊!敢和老师叫板");
break;
default:
System.out.println("这孩子没上小学");
break;
会输出
小学贪玩啊!经常作业得3分
小学干嘛呢!经常作业得2分,坏学生
小学胆子够大的!经常作业得1分
小学牛逼啊!敢和老师叫板
这也是为什么那么多人喜欢使用if else了,哪怕一个简单的字符匹配,也用if else。switch表达式的类型只有Java个别的基本类型和枚举——byte、short、int、char、enum。其他类型都不能作为预判断变量。
2. 方法的重载
JVM在识别方法的时候有一定的智能型,传入的实参如果和定义的形参不一样的话,那么会向上转型以适应方法的调用需要,比如
public static void test(String str, double num) {
System.out.println("test(String str,double num):" + str + "|" + num);
}
public static void main(String[] args) {
test("叶", 10);
}
实参第二个参数不是double类型的,那么再执行test的时候它会向上转型,让它自动匹配double,如果重载方法还有更精确的形参,那么自然会去匹配最精确的方法了。
比如
public static void test(String str, double num) {
System.out.println("test(String str,double num):" + str + "|" + num);
}
public static void test(String str, int num) {
System.out.println("test(String str,int num):" + str + "|" + num);
}
/**
* @param args
*/
public static void main(String[] args) {
test("叶", 10);
}
实参10不必向上转型,直接执行test(String str, int num)这个方法。
3. 非静态内部类
非静态内部类实际上需要外部类才能顺利创建实例,非静态内部类的构造函数,JVM都做了特别的处理,将外部类对象作为默认构造器的第一个隐式参数。而且非静态内部类有个限制,不能拥有静态成员变量,因为非静态的内部类本身就处在一个非静态的上下文环境中
4. 静态内部类
如果非使用静态类不可,其实大多数都是用静态内部类,因为静态内部类可以访问外部类的静态成员变量。而换句话说,静态内部类不能访问外部类的非静态成员变量。所谓静态static,就是理解成类对象级别的,非静态成员变量是实例对象级别的,属于在类对象创建完了它才创建呢。怎么能在类对象中使用一个还没创建出来的东东呢?
5. 异常处理
finally的使用:一般在finally中回收一些资源,比如数据库连接的关闭、IO文件流的通道关闭、临时变量的指针回收等等操作。唯一存有疑问的可能就是finally的执行时机。到底是在return之前还是之后,实际上如果一个try块存在return了,那么如果这段try块有相应的finally的话那么return操作先挂起,之后执行finally中的代码,如果finally代码块没有return,或者其他影响try块的语句的话,那么执行完finally代码段之后再执行return语句。什么情况下finally中会影响try中的return执行呢?就是finally中也存在着return语句,或者System.exit(0);这种系统级关闭的语句。
如下:
try{
test("叶", 10);
return ;
}finally{
System.out.println("haha");
return;
}
那么try的return是不会执行的。还有一点就是即使try块抛出异常了,finally会执行吗?
如下:
try{
test("叶", 10);
throw new RuntimeException("运行时异常");
}finally{
System.out.println("haha");
return;
}
实际上finally块依然会执行,并且此时RuntimeException也不会往上抛异常了,因为在finally块已经正常返回了。
catch到一个异常后不应该在catch中执行任何与应用有关的业务逻辑了,而是应当及时反映异常,比如打印到控制台、发送错误消息、记录error日志、发送错误的消息(web service、JMS、socket)等等操作。如果在catch中进行业务处理有可能是死循环,将资源都吃掉不说,真正导致异常的错误信息估计此时也已经错过了。
比如代码
try{
test("叶", 10);
}catch(RuntimeException e){
test("金小开", 12);
}finally{
System.out.println("haha");
return;
}
就不太妥了。当然了极端的情况不是没有,有可能自己的系统应用中大量使用了自定义的异常类。遇到某某自定义的异常后尝试继续执行某业务,这个场景虽然极端,但是确实存在,只不过这样的处理有点违背Java设计异常机制的初衷。
分享到:
相关推荐
java面试笔试题库java学习比较开发教程互联网公司面试资料大全合集: 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring面试问答.docx 8张图解...
### Java基础复习笔记03:我们不会注意的陷阱 在Java编程中,存在许多细节问题,如果不加以注意,则可能在实际开发过程中导致各种难以预料的问题。本文将通过一系列实例来探讨那些经常被忽略的陷阱,并对其进行深入...
根据提供的文件信息,我们可以推断出这是一本关于Java程序员面试和笔试准备的书籍,作者为何昊。本书可能包含了大量关于Java编程语言的基础知识、高级特性以及与面试相关的技巧和策略等内容。下面将对可能涉及的重要...
1. **Java基础**:Java的基础语法包括数据类型(如整型、浮点型、字符型、布尔型),变量,运算符,流程控制(if-else,switch,for,while等),以及方法的定义和调用。 2. **类与对象**:Java是一种面向对象的...
Java面试笔记 225道Java面试题JAVA面试基础知识点总结Java数据结构题 JAVA笔试面试WORD资料汇总(19个): 2014年最新Java笔试题及答案.docx 225道Java面试题 学会了Java面试随你问.docx Ant和Maven的作用是什么?两者...
本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...
1. 标题中提到的“Java笔试面试全复习笔记”,表明这份文件可能是针对准备面试的Java程序员,包含了Java基础知识、面向对象的特性、异常处理、数据结构、Java内存模型、线程和同步机制、集合框架、输入输出(I/O)处理...
Java EE的复习笔记是学习这个复杂框架的重要参考资料,尤其对于开发者来说,深入理解其核心概念和技术是必不可少的。 首先,Struts是Java EE中的一个MVC(Model-View-Controller)框架,它的主要任务是分离业务逻辑...
java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring面试问答.docx ...
Java基础每日复习笔记-JavaSE高级阶段.edf
这份“笔记_JAVA基础篇,面试必问的那些事”压缩包文件,显然是为准备Java面试的人提供了一份详尽的复习资料。以下是Java基础知识的一些关键点,这些都是在面试中经常被问到的话题: 1. **Java语法基础**:Java的...
这份《Java基础复习笔记.docx》提供了全面的复习材料,涵盖了Java编程的基础至进阶概念,对于那些希望提升Java技能的学习者来说是宝贵的资源。 首先,笔记详细介绍了Java的基本数据类型,包括整型(如int)、浮点型...
Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年发布。Java以其“一次编写,到处运行”的特性,成为跨平台应用开发的首选语言。Java的基础部分主要包括以下几个方面:...
Java基础每日复习笔记-JavaSE基础阶段.edf
Java编程语言是软件开发领域中的重要工具,尤其在企业级应用和互联网服务中占据着核心地位。这份"java复习笔记"旨在帮助学习者系统地回顾和深入理解Java的关键概念和技术,以便于提升编程技能和应对各种开发挑战。 ...
Java基础每日复习笔记-JavaSE高级阶段.2020-10-13-211312.edf
java面试笔试资料Java经典项目集锦java笔试题大集合及答案题库java笔试题汇总资料个合集(188) 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring...
java面试笔试题库java软件设计java笔试题大集合及答案文档资料合集300MB“ 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring面试问答.docx 8张...