java基础知识拾遗(二)
1.finally
public static int func (){
try{
return 1;
}catch (Exception e){
return 2;
}finally {
return 3;
}
}
public static int func (){
try{
throw new Exception();
}catch (Exception e){
return 2;
}finally {
return 3;
}
}
返回值均为3;这表明finally块的代码会在正常return之前被执行;
2.java异常处理类之间的关系
异常的继承结构:基类为 Throwable,Error 和 Exception 继承 Throwable,RuntimeException 和 IOException 等继承 Exception
非 RuntimeException 一般是外部错误,其必须被 try{}catch 语句块所捕获
Error 类体系描述了 Java 运行系统中的内部错误以及资源耗尽的情形,Error 不需要捕捉
3.线程run()方法
线程类想要开辟新线程必须执行start()方法,start()方法内部会调用该类已实现的run()方法.如果执行run(),相当于执行一个普通方法,属于当前线程.
4.int 和 Interger比较
int i=0;
Integer j = new Integer(0);
System.out.println(i==j);
System.out.println(j.equals(i));
改代码输出:true,true;
int类型与Integer进行比较,Integer会自动拆箱成Int类型再比较,所以为true。
5.String对象参数传递
如果是以String s = "str"创建,则按值传递,因为按这种方式创建的对象如果字面量相同,则只存在一个对象在方法区中
6.i++和++i
public static int test(int c) {
c = c++;
return c;
}
public static void main(String [] args){
System.out.println(test(0));
}
输出0;
看看test方法的字节码
0: iload_0 //加载第一个参数到堆栈
1: iinc 0, 1 //对本地变量区的第一个变量进行自增操作
4: istore_0 //将第一步加载的参数数值赋给本地变量区的第一个变量
5: iload_0 //将本地变量区的第一个变量加载到堆栈
6: ireturn //返回上一步加载到堆栈的变量
public static int test(int c) {
c = ++c;
return c;
}
public static void main(String [] args){
System.out.println(test(0));
}
输出1;
同样来看看test方法的字节码
0: iinc 0, 1//将本地变量区的第一个变量进行自增操作
3: iload_0 //加载本地变量区的第一个变量到堆栈
4: istore_0 //将上一步加载的变量赋给本地变量区的第一个变量(即本身)
5: iload_0
6: ireturn
事实上i++和++i在底层的实现都是先自增,区别在于返回值.i++返回自增前的值,++i返回自增后的值
7.if(x=y)
public static void main(string[]args){
int x=3;
int y=1;
if(x=y)
system.out.println(“Not equal”);
else
system.out.println(“Equal”);
}
编译时错误
if()括号内要求布尔值,发现int类型
class Person {
String name = "No name";
public Person(String nm) {
name = nm;
}
}
class Employee extends Person {
String empID = "0000";
public Employee(String id) {
empID = id;
}
}
public class Test {
public static void main(String args[]) {
Employee e = new Employee("123");
System.out.println(e.empID);
}
}
编译时错误
子类的构造方法总是先调用父类的构造方法,如果子类的构造方法没有明显地指明使用父类的哪个构造方法,子类就调用父类不带参数的构造方法。
而父类没有无参的构造函数,所以子类需要在自己的构造函数中显示的调用父类的构造函数。
9.异常捕捉
public void getCustomerInfo() {
try {
// do something that may cause an Exception
} catch (java.io.FileNotFoundException ex) {
System.out.print("FileNotFoundException!");
} catch (java.io.IOException ex) {
System.out.print("IOException!");
} catch (java.lang.Exception ex) {
System.out.print("Exception!");
}
}
10.接口变量
public interface IService {String NAME="default";}
相当于
public static final String NAME="default";
11.final与继承
class Car extends Vehicle
{
public static void main (String[] args)
{
new Car(). run();
}
private final void run()
{
System. out. println ("Car");
}
}
class Vehicle
{
private final void run()
{
System. out. println("Vehicle");
}
}
以上代码输出Car
首先final声明的方法是不能被覆盖的,但是这里并不错误,因为方法是private的,也就是子类没有继承父类的run方法,因此子类的run方法跟父类的run方法无关,并不是覆盖。new Car().run()也是调用子类的run方法。
java基础知识拾遗(二)的更多相关文章
- Java基础知识拾遗(一)
类型提升规则 Java定义了几个应用于表达式的类型提升规则:所有byte.short和char类型的值都被提升为int类型.如果有一个操作数是long类型,将这个表达式提升为 long 类型:如果有一 ...
- java基础知识(二)-----多态和构造函数
一:前言 最近由于面试了新浪公司,面试官问我的问题我都不知道,觉得自己好菜,所以最近决定再把java基础给搞一遍,真的觉得自己好菜.每天看一点,那个家伙说<java编程思想>最少要看三遍, ...
- Java基础知识拾遗(二)
Lambda表达式 lambda表达式本质上就是一个匿名方法.但是这个方法不是独立执行的,而是构成了一个函数式接口定义的抽象方法的实现,该函数式接口定义了它的目标类型. 只有在定义了lambda表达式 ...
- Java基础知识(二)
一.基本概念 1. Java程序初始化的顺序是怎么样的 2. Java和C++的区别 3. 反射 先看一个知乎回答 什么是反射 主要用途 获得Class对象 4. 注解 什么是注解 为什么要用注解 基 ...
- Java 基础知识总结 (二、基本数据类型)
二.基本数据类型 java基本数据类型只能先声明后使用 boolean true/false char 16-bit unicode character byte 8-bit integer sho ...
- java基础知识拾遗(四)
1.Runnable对象 启动线程:(new Thread(new MyRunnable()).start() 2.jsp中<%@ page language="java" ...
- Java基础知识拾遗(四)
IO SequenceInputStream,允许链接多个InputStream对象.在操作上该类从第一个InputStream对象进行读取,知道读取完全部内容,然后切换到第二个InputStream ...
- Java基础知识拾遗(三)
集合框架 SortedSet接口,声明了以升序进行排序的行为. Queue接口,声明了队列行为,队列通常是先进先出的列表 Deque接口,扩展了Queue接口,声明了双端队列的行为.双端队列可以像标准 ...
- Java基础知识陷阱(二)
本文发表于本人博客. 上次说了一些关于字符串的知识,都是比较基础的,那这次也说下关于对象地址问题,比如传参.先看下面代码: public void changeInt(int a){ a = ; } ...
随机推荐
- InstallShield集成安装MSDE2000最小版本(二) fishout特许授权发布
原文:InstallShield集成安装MSDE2000最小版本(二) fishout特许授权发布 原帖地址:http://blog.csdn.net/fishout/archive/2009/10/ ...
- 初探async await 实现多线程处理
初探async await 实现多线程处理 这是微软关于Async的介绍:http://msdn.microsoft.com/en-us/library/hh156513.aspx 这是await : ...
- leetcode[164] Maximum Gap
梅西刚梅开二度,我也记一题. 在一个没排序的数组里,找出排序后的相邻数字的最大差值. 要求用线性时间和空间. 如果用nlgn的话,直接排序然后判断就可以了.so easy class Solution ...
- dpkg: error processing mysql-server (--configure): dependency problems - leaving unconfigured
dpkg: error processing mysql-server (--configure): dependency problems - leaving unconfigured start: ...
- 创建自己的github代码库
前提: 1.安装git 2.在github上创建一个repository(库),如名字叫Hello-World,则git地址为https://github.com/username/Hello-Wor ...
- Python的@符号
Python一直都属于用,没有去系统学习过,在一次代码review中见到了@符号,回来看了下,这个符号用于装饰器中,用于修饰一个函数,把被修饰的函数作为参数传递给装饰器,下面举几个例子: 1. @cl ...
- Routing(路由) & Multiple Views(多个视图) step 7
Routing(路由) & Multiple Views(多个视图) step 7 1.切换分支到step7,并启动项目 git checkout step-7 npm start 2.需求: ...
- LaTex代码生成器
latex代码生成器 希腊字母 \alpha \beta \gamma \delta \epsilon \zeta \eta \theta \iota \kappa \lambda \mu \nu \ ...
- 只有五行的Floyd最短路算法
暑假,小哼准备去一些城市旅游.有些城市之间有公路,有些城市之间则没有,如下图.为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程. 上图中有 ...
- Aforge.net 一个专门为开发者和研究者基于C#框架设计
时间过得真快啊,转眼今年就要过去了,大半年都没有写博客了,要说时间嘛,花在泡妹子和搞英语去了,哈哈...前几天老大问我 怎么这么长时间都没写博客了,好吧,继续坚持,继续分享我的心得体会. 这个系列我们 ...