`
suhuanzheng7784877
  • 浏览: 708771 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Ff8d036b-05a9-33b5-828a-2633bb68b7e6
读金庸故事,品程序人生
浏览量:47933
社区版块
存档分类
最新评论

Java基础复习笔记03面试、笔试、开发中我们不太注意的陷阱之流程控制、面向对象、异常处理

阅读更多

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 elseswitch表达式的类型只有Java个别的基本类型和枚举——byteshortintcharenum。其他类型都不能作为预判断变量。

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;
		}

 那么tryreturn是不会执行的。还有一点就是即使try块抛出异常了,finally会执行吗?

如下:

		try{
			test("叶", 10);
			throw new RuntimeException("运行时异常");
		}finally{
			System.out.println("haha");
			return;
		}

 实际上finally块依然会执行,并且此时RuntimeException也不会往上抛异常了,因为在finally块已经正常返回了。

catch到一个异常后不应该在catch中执行任何与应用有关的业务逻辑了,而是应当及时反映异常,比如打印到控制台、发送错误消息、记录error日志、发送错误的消息(web serviceJMSsocket)等等操作。如果在catch中进行业务处理有可能是死循环,将资源都吃掉不说,真正导致异常的错误信息估计此时也已经错过了。

比如代码

		try{
			test("叶", 10);
		}catch(RuntimeException e){
			test("金小开", 12);
		}finally{
			System.out.println("haha");
			return;
		}

 就不太妥了。当然了极端的情况不是没有,有可能自己的系统应用中大量使用了自定义的异常类。遇到某某自定义的异常后尝试继续执行某业务,这个场景虽然极端,但是确实存在,只不过这样的处理有点违背Java设计异常机制的初衷。

 

分享到:
评论

相关推荐

    java面试笔试题库java学习笔记开发教程互联网公司面试资料大全合集.zip

    java面试笔试题库java学习比较开发教程互联网公司面试资料大全合集: 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring面试问答.docx 8张图解...

    Java基础复习笔记03我们不会注意的陷阱

    ### Java基础复习笔记03:我们不会注意的陷阱 在Java编程中,存在许多细节问题,如果不加以注意,则可能在实际开发过程中导致各种难以预料的问题。本文将通过一系列实例来探讨那些经常被忽略的陷阱,并对其进行深入...

    java笔记java笔试题 java面试题

    1. **Java基础**:Java的基础语法包括数据类型(如整型、浮点型、字符型、布尔型),变量,运算符,流程控制(if-else,switch,for,while等),以及方法的定义和调用。 2. **类与对象**:Java是一种面向对象的...

    Java面试笔记 225道Java面试题JAVA面试基础知识点总结Java数据结构题笔试WORD资料汇总(19个).zip

    Java面试笔记 225道Java面试题JAVA面试基础知识点总结Java数据结构题 JAVA笔试面试WORD资料汇总(19个): 2014年最新Java笔试题及答案.docx 225道Java面试题 学会了Java面试随你问.docx Ant和Maven的作用是什么?两者...

    Java基础 学习笔记 Markdownr版

    本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...

    Java笔试面试全复习笔记rnxefe版本.pdf

    1. 标题中提到的“Java笔试面试全复习笔记”,表明这份文件可能是针对准备面试的Java程序员,包含了Java基础知识、面向对象的特性、异常处理、数据结构、Java内存模型、线程和同步机制、集合框架、输入输出(I/O)处理...

    java ee 复习笔记

    Java EE的复习笔记是学习这个复杂框架的重要参考资料,尤其对于开发者来说,深入理解其核心概念和技术是必不可少的。 首先,Struts是Java EE中的一个MVC(Model-View-Controller)框架,它的主要任务是分离业务逻辑...

    java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集.zip

    java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring面试问答.docx ...

    Java基础每日复习笔记-JavaSE高级阶段.edf

    Java基础每日复习笔记-JavaSE高级阶段.edf

    笔记_JAVA基础篇,面试必问的那些事.zip

    这份“笔记_JAVA基础篇,面试必问的那些事”压缩包文件,显然是为准备Java面试的人提供了一份详尽的复习资料。以下是Java基础知识的一些关键点,这些都是在面试中经常被问到的话题: 1. **Java语法基础**:Java的...

    Java基础复习笔记.docx

    这份《Java基础复习笔记.docx》提供了全面的复习材料,涵盖了Java编程的基础至进阶概念,对于那些希望提升Java技能的学习者来说是宝贵的资源。 首先,笔记详细介绍了Java的基本数据类型,包括整型(如int)、浮点型...

    Java基础尚硅谷宋红康学习笔记

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年发布。Java以其“一次编写,到处运行”的特性,成为跨平台应用开发的首选语言。Java的基础部分主要包括以下几个方面:...

    Java基础每日复习笔记-JavaSE基础阶段.edf

    Java基础每日复习笔记-JavaSE基础阶段.edf

    java复习笔记

    Java编程语言是软件开发领域中的重要工具,尤其在企业级应用和互联网服务中占据着核心地位。这份"java复习笔记"旨在帮助学习者系统地回顾和深入理解Java的关键概念和技术,以便于提升编程技能和应对各种开发挑战。 ...

    Java基础每日复习笔记-JavaSE高级阶段.2020-10-13-211312.edf

    Java基础每日复习笔记-JavaSE高级阶段.2020-10-13-211312.edf

    java面试笔试资料Java经典项目集锦java笔试题大集合及答案题库java笔试题汇总资料个合集(188).zip

    java面试笔试资料Java经典项目集锦java笔试题大集合及答案题库java笔试题汇总资料个合集(188) 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring...

    (笔试面经)java学习笔记面试经验PGC.zip

    这包括但不限于Java的数据类型、控制流程、面向对象的概念、异常处理、集合框架、多线程、IO流、网络编程等。这些知识点不仅是面试中经常被问到的,也是实际开发工作中的基础。求职者在学习过程中,应该注重理论与...

    (笔试面经)java学习笔记面试经验.zip

    本篇Java学习笔记面试经验集中整理了Java基础知识、核心概念、流行框架、面试技巧等方面的内容,旨在为求职者提供全面的复习资料和面试指导。 首先,Java基础知识部分通常包括Java语言的基本数据类型、运算符、控制...

    java面试笔试题库java软件设计java笔试题大集合及答案文档资料合集300MB.zip

    java面试笔试题库java软件设计java笔试题大集合及答案文档资料合集300MB“ 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring面试问答.docx 8张...

Global site tag (gtag.js) - Google Analytics