Java基础·疑难点


2019-08-03  19:51:39  by冲冲

1. 部分Java关键字

instanceof:用来测试一个对象是否是指定类型的实例。

native:用来声明一个方法是由与计算机相关的语言(C/C++/FORTRAN语言)实现的。

(1)break、continue

break:①switch判断语句中,用于跳出switch语句体。②一个循环体中,用于跳出该循环体。

注意:当循环体中包含switch语句,若break在switch语句中,则用于结束switch语句;若想用于结束该循环体,则在switch体外设置break。

continue:仅结束本次循环,然后开始下一次循环。(跳过本次循环体中余下未执行的语句,立即进行下一次循环条件的判定)

(2)final、finally

final:声明为最终,表明一个final类不能派生子类、或者一个final方法不能被覆盖,或者一个final成员的不能改变值。(String类就是一个final类)

finally:用于在处理异时,声明一个肯定会被执行到的语句块。fianlly块不被执行的情况

注意

① final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法

② 当你不希望该方法在子类中被覆盖时声明其为final。父类的final方法不能被子类重写,但是可以被重载。需要注意的是,因为重写的前提是子类可以从父类中继承此方法,如果父类中final修饰的方法其访问控制权限为private,将会导致子类中不能直接继承到此方法,因此可以在子类中定义相同的方法名和参数,此时不再产生重写与final的矛盾,而是在子类中重新定义了新的同名方法,该方法属于子类本身的方法。(注:类的private方法会隐式地被指定为final方法。)

③ final成员变量表示常量,只能被赋值一次,赋值后值不再改变当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。本质上是一回事,因为引用的值是一个地址,final要求值,即地址的值不发生变化。

④ final修饰一个成员变量(属性),必须要显示初始化。这里有两种初始化方式,一种是在变量声明的时候初始化;第二种方法是在声明变量的时候不赋初值,但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值。当参数的类型声明为final时,说明该参数是只读型的。即你可以读取使用该参数,但是无法改变该参数的值。

浅谈Java中的final关键字  

(3)super、this

super:表示当前对象的父类型引用,或者父类型的构造方法。
this:表示当前对象的引用,或者当前对象的构造方法。

注意

① 如果通过this关键字调用其他构造方法时,this()语句必须是该构造方法的第一个子句,否则编译器会报错。也就是说,在构造方法中只能调用一次this([参数]),第二个子句不能再使用this

如果该构造方法没有显式地通过this调用其他构造方法,那么编译器不会自动为它添加默认的this()方法调用,但是会自动为它加上一个默认的super()方法调用

③ 如果该构造方法没有显式地调用父类的构造方法,那么编译器会自动为它加上一个默认的super()方法调用。如果父类没有默认的无参构造方法,编译器就会报错,super()语句必须是该构造方法的第一个子句。每个子类构造方法的第一条语句,都是隐含地调用super(),如果该子类构造器的第一句是this([参数n]),那么该this([参数n])方法的第一句就得显式或隐式调用super()。如果还是this([参数n])的第一句还是this([参数m]),那么该this([参数m])方法的第一句就得显式或隐式调用super(),依次类推...

④ this()和super()表示的都是对象,所以都不能在static环境中使用。包括:static变量、static方法、static语句块。

class Creature {
public Creature(){
// 这里会自动调用最终父类的默认构造器 Object()
System.out.println("初始化一个生物");
}
} class Animal extends Creature {
public Animal(){
// 这里会自动调用父类Creature的默认构造器 super()
System.out.println("初始化一个动物");
} public Animal(int head){
this();
this.head = head;
System.out.println("该动物有"+head+"个头");
} public Animal(int head, int nose){
//this(); this只能调用一个
this(head);
this.nose = nose;
System.out.println("该动物有"+head+"个头和"+nose+"个鼻子");
}
}

(4)throw、throws

throw:出现在函数体内,表示抛出一个异常。
throws:出现在函数头,用于声明在当前方法中所有需要抛出的异常。

通常情况,当程序的语句出现异常时,系统会被动地自动抛出异常。

1 public static void main(String[] args) {
2 int a = 5, b =0;
3 System.out.println(5/b);
4 }
5 /**************
6 系统会自动抛出ArithmeticException异常,程序意外中止
7 ***************/

① throw表示主动抛出一个异常,通常发生在代码块的内部,当程序出现某种逻辑错误时由程序员主动抛出某种特定类型的异常。

 1 public static void main(String[] args) {
2 String s = "abc";
3 if(s.equals("abc")) {
4 throw new NumberFormatException();
5 } else {
6 System.out.println(s);
7 }
8 }
9 /************
10 控制台显示:
11 Exception in thread "main" java.lang.NumberFormatException at......
12 *************/

② throws用于声明方法可能抛出的异常。

public void function() throws Exception{......}

当某个方法可能会抛出某种异常时用throws 声明可能抛出的异常,然后交给上层调用它的方法程序处理。

 1 public class testThrows {
2
3 public static void function() throws NumberFormatException {
4 String s = "abc";
5 System.out.println(Double.parseDouble(s));
6 }
7
8 public static void main(String[] args) {
9 try {
10 function();
11 } catch (NumberFormatException e) {
12 System.err.println("非数据类型不能强制类型转换。");
13 //e.printStackTrace();
14 }
15 }
16 }
17 /************
18 控制台显示:
19 非数据类型不能强制类型转换。
20 *************/

throw和throws 两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),它们只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用者来处理。

通常情况,程序对可能会出现异常的部分,要用try{...}catch{...}去捕捉它,并在catch{...}中对该异常进行处理。处理的方式可以是一句简单的输出语句,可以是栈输出e.printStackTrace(); ,或者其它。

如果是捕捉IO输入输出流中的异常,一定要在try{...}catch{...}后加finally{...}把输入输出流关闭。

如果在函数体内用throw抛出某种异常,最好要在函数名中用throws对抛出的异常进行声明,然后交给调用它的上层函数通过catch{...}进行处理。

(5)synchronized、volatile

synchronized:表示一段代码需要同步执行。
volatile:表示两个或多个变量必须同步地发生变化。

2. break自定义标签跳转

 1 public class Test {
2 public static void main(String[] args) {
3 int i, j;
4 first: for (i = 4; i > 1; i--) {
5 second: for (j = 4; j > 1; j--) {
6 if (j == 2) {
7 break first;
8 }
9 System.out.println(i + "-" + j);
10 }
11 }
12 }
13 }
14
15 /****************
16 输出结果:
17 4-4
18 4-3
19 *****************/

3. try、catch、finally的搭配

try语句后面必须要有一个别的语句(catch块或者finally块)跟在后面。try-catch、try-catch-finally、try-finally。其中catch和finally不能同时省略。

【JavaSE】Java基础·疑难点汇集的更多相关文章

  1. java基础疑难点总结之成员变量的继承,方法重载与重写的区别,多态与动态绑定

    1.成员变量的继承 1.1要点 子类用extends关键字继承父类.子类中可以提供新的方法覆盖父类中的方法.子类中的方法不能直接访问父类中的私有域,子类可以用super关键字调用父类中的方法.在子类中 ...

  2. JavaSE学习总结(一)——Java基础

    一.Java是什么 Java 是由 Sun Microsystems 在 1995 年首先发布的编程语言和计算平台.Java 是一项用于开发应用程序的技术,可以让 Web 变得更有意思和更实用.有许多 ...

  3. JavaSE入门学习7:Java基础语法之语句(下)

    继续接着Java基础语法来:JavaSE入门学习5:Java基础语法(一)和JavaSE入门学习6:Java基础语法(二). 语句 Java经常使用的3种循环:while.do...while,for ...

  4. JavaSE入门学习6:Java基础语法之运算符和语句(上)

    继续接着上篇:JavaSE入门学习5:Java基础语法(一)来看Java的基础语法. 五运算符 运算符是一种"功能"符号,用以通知Java进行相关的运算.比方.我们须要将变量age ...

  5. JavaSE部分之(1)Java基础

    JavaSE部分之(1)Java基础 1.为什么重写equals还要重写hashcode 为了提高程序的效率才实现了hashcode方法,先进行hashcode的比较,如果不同,那就没必要再进行equ ...

  6. Java匹马行天下之JavaSE核心技术——Java基础语法

    Java基础语法 一.   认识Java 1. Java 简介 java 是一种高级的面向对象的程序设计语言,使用Java语言编写的程序时跨平台的.从pc到手机,都有Java开发的程序和游戏,Java ...

  7. Java基础之疑难知识点

    问题列表: 1. Java中子类中可以有与父类相同的属性名吗? 2. Java中子类继承了父类的私有属性及方法吗? 3. Java中抽象类到底能不能被实例化? 1. Java中子类中可以有与父类相同的 ...

  8. JavaSE基础(三)--Java基础语法

    Java 基础语法 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如 ...

  9. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

随机推荐

  1. std::sort 的注意事项

    Luogu P1177 [模板]快速排序 \(\Large{AC}\) 代码: #include<bits/stdc++.h> using namespace std; int n,a[1 ...

  2. FastAPI 学习之路(十一)请求体 - 嵌套模型

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  3. NX屏蔽窗口的按钮

    有时候在激活一个命令按钮的时候,需要同时禁止掉另外一个或多个命令按钮 ''' <summary> ''' 取按钮是否敏感 ''' </summary> ''' <para ...

  4. nsq - 一条消息的生命周期(一)

    经过前面几篇的学习,相信大家对nsq已经有了一个大概的了解,我在写这篇文章的时候也看了很多其他人写的教程,发现大家对于分析系统每个点写的很不错,但是都很少有整体串起来一起走一遍,所以,我打算分成2-3 ...

  5. 腾讯bugly产生bug定位行数不准解决方案

    定位不准是因为做了混淆导致行数与实际代码行数不对.解决方案是要上传符号表.下载地址https://bugly.qq.com/v2/downloads 下载好因为我打开文件的说明文件是空文件(可能工作人 ...

  6. OO第四单元UML作业总结暨OO课程总结

    目录 目录一.第四单元UML两次作业架构设计第一次作业第二次作业二.架构设计总结与OO方法理解演进三.测试理解与实践演进四.课程收获总结五.课程改进建议六.尾声 一.第四单元UML两次作业架构设计 第 ...

  7. Spring Security 多过滤链的使用

    Spring Security 多过滤链的使用 一.背景 二.需求 1.给客户端使用的api 2.给网站使用的api 三.实现方案 方案一: 方案二 四.实现 1.app 端 Spring Secur ...

  8. dfs初步模板解析

    #include<stdio.h> int a[10],book[10],n; //这里还有需要注意的地方C语言全局变量默认为0 void dfs(int step){ //此时在第ste ...

  9. wpa_supplicant启动出错rfkill: Cannot open RFKILL control device

    在板子是调试网络,千辛万苦把wpa_supplicant及其依赖都移植编译进来了,在板子上调试启动的时候启动报错了 D/wpa_supplicant( 1152): wpa_supplicant v2 ...

  10. Linux ps -ef 命令输出解释

    UID: 程序拥有者PID:程序的 IDPPID:程序父级程序的 IDC:  CPU 使用的百分比STIME: 程序的启动时间TTY: 登录终端TIME : 程序使用掉 CPU 的时间CMD: 下达的 ...