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基础复习笔记03我们不会注意的陷阱。
Java基础复习笔记03我们不会注意的陷阱.pdf
java面试笔试题库java学习比较开发教程互联网公司面试资料大全合集: 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring面试问答.docx 8张图解...
Java基础每日复习笔记-JavaSE基础阶段.edf
Java基础每日复习笔记-JavaSE高级阶段.edf
《Java基础复习笔记.docx》是一份宝贵的学习资源,旨在帮助那些已经具有一定Java编程基础的学习者巩固知识、进行复习以及更深入地理解Java编程的核心概念。以下是对这个资源的详细描述: 全面的复习内容:这份资源...
java笔试java面试宝典,java笔记 本人整理
Java基础 java学习笔记 Java Java基础Markdown学习笔记,可转换成PDF、Word等格式
Java程序员面试笔试宝典-何昊pdf版,高清,带有书签。
Java基础每日复习笔记-JavaSE高级阶段.2020-10-13-211312.edf
Java面向对象笔记 Java面向对象知识点分成7部分:对象类、继承多态、构造器、类包内外访问权限、各种静态内部类、抽象函数、接口
java语言概述,java语言基础,程序的控制语句,数组,面向对象基础,继承,多态,抽象类,接口,异常处理,集合类,输入输出流,多线程,JDBC连接数据库等简单的java基础知识。 适合想学习java语言的同学们下载。 ...
java ee 复习笔记,是网友制作,有strut spring hibernate等啊
SCJC学习笔记(笔试 面试 精选) JAVA scjp 学习笔记 笔试 面试 精选
java 面向对象基础笔记级适合于java的初级学者来使用,也易于复习使用
java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring面试问答.docx ...
java面试笔试题库java软件设计java笔试题大集合及答案文档资料合集300MB“ 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring面试问答.docx 8张...