琐碎的知识点
- 方法上如果带着删除线,代表该方法是过时的方法,不推荐使用,但是也可以使用。
- 一定一定要注意编码规范,可以多看看《Java开发手册》
输入输出
- 输出语句:
// 标准输出,但是换行
System.out.println();
// 标准输出,不换行
System.out.print();
// 格式化输出,不换行(继承自C语言的一些特性)
System.out.printf()
- 输入语句:
使用时须在源文件的第一行导入:import java.util.Scanner;
// 获取用户输入一行信息
String nextLine()
// 获取用户输入的一个boolean类型的值
boolean nextBoolean()
// 获取用户输入的一个short类型的值
short nextShort()
// 获取用户输入的一个int类型的值
int nextInt()
// 获取用户输入的一个long类型的值
long nextLong()
// 获取用户输入的一个double类型的值
double nextDouble()
例如:
// 在控制台提示用户输入一个圆的半径,计算并输出圆的面积。
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入一个半径:");
double radius = input.nextDouble();
double area = radius * radius * 3.14;
System.out.println("圆的面积为:" + area);
}
}
类和对象
- 数组的实例化对象方法
static修饰符
-
-
静态代码块在类被加载时执行,此后无论是否再实例化对象,都不会执行
静态代码块与写代码时的先后顺序有关,如:
定义的静态变量放在静态代码块的后面,静态代码块在调用时不能直接调用
-
对于有父类的类,先加载父类,所以会先执行父类的静态代码块。
-
调用子类的构造方法时会调用父类的构造方法,所以会先执行父类的构造方法
-
-
代码块和构造方法,在每次实例化对象的时候都会执行,并且与写代码的顺序无关
-
用static和final修饰方法一般是表示改方法重要,不可轻易修改,是给别人看的
用static和final修饰属性一般表示常量
枚举
-
枚举当中都是大写字母即都是常量
-
最后一个常量的最后最好加上分号";"
-
枚举中每一个常量代表的值依次向后从0开始0,1,2……
-
枚举的几个方法
使用方法:类名.常量名.方法名
ordinal()是获取系统设定好的索引值,依次为0,1,2……
index是获取自己设定好的索引值
name()是获取常量表面的名字
title是获取自己设定好的名字
-
枚举只提供get方法,不提供set方法
-
枚举中equals、hashcode 方法是 final 的,所以不可以被枚举重写(只可以继承)。但是,可以重写 toString 方法。
-
Java 不允许使用 = 为枚举常量赋值。
-
枚举不能继承类
-
一般用法:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VXYJW68R-1605661125189)(Java笔记.assets/image-20201108090101852.png)]
异常和断言
-
Java提供异常类来表示程序运行中发生的异常
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SXRqFQrk-1605661125193)(Java笔记.assets/image-20201108092144594.png)]
-
通常Error程序员不处理,上报给运维人员
-
RuntiomeException
:运行时异常 -
IOException
:非运行时异常 -
ArithmeticException
:运算条件异常 -
NiullPointerException
:空指针异常 -
IndexOutOfBoundException
:下标异常 -
EOFException
: -
FileNotFoundException
: -
运行时异常可以不加try catch,非运行时异常必须加
-
-
捕获异常
try { //接受监视的程序块,在此区域内发生的异常, //由catch中指定的程序处理; }catch(要处理的异常种类和标识符) { //处理异常; }
-
try
代码块里的程序出现异常,改程序后面的代码块部分,不会执行 -
现阶段
catch
里一般写e.printStackTrace();
-
catch
后面的小括号里,可以放不同异常类型,和1里的异常关系图一样,大的异常类包含小的异常类
-
-
多重异常
-
可以写多个
catch
异常类中,按照catch
的先后,子类在前,父类在后 -
也可以这样写
//一个catch可以捕获多个异常。 //多个异常类型之间用“|”分隔开。 //只有1个异常类型的标识符。 //多个异常类型之间不存在父子继承关系。 try { i = a / b; System.out.println("try block"); } catch (IndexOutOfBoundsException | ArithmeticException e1) { System.out.println("发生异常,请处理该异常!"); }
-
-
finally语句块
-
finally语句定义一个总是被执行的代码块,而不考虑是否出现异常
无论try、catch是否执行,finally必定执行
-
不执行finally语句块的特殊情况
在执行finally之前首先执行了
System.exit(0);
-
finally语句块典型应用
回收资源
-
多个
return
会返回最后一个
-
-
抛出异常
void doA(int a) throws Exception1,Exception3{ try{ ...... }catch(Exception1 e){ throw e }catch(Exception2 e){ System.out.println("出错了!"); } if(a!=b){ throw new Exception3("自定义异常"); } }
throws
用来抛出异常,抛给调用改方法的地方。throw
用来产生异常。
-
常见异常
NullPointException
:空引用异常NumberFormatException
:数字格式异常ClassNotFoundException
:未找到了类异常ArrayIndexOutOfBoundsException
:数组下标越界异常ClassCastException
:类型转换异常
-
自定义异常
要自己会写,一般是自己定义一个异常继承父类,这个自定义的异常类里可以重写
getMessage
,printStackTrace
,toString
方法,在父类里若有使用该异常的情况,则用throw实例化自定义异常,可以用try catch处理也可以抛出去 -
断言(了解)
-
使用断言的场合
- 可以在预计正常情况下程序不会到达的地方放置断言 :assert false
- 断言可以用于检查传递给私有方法的参数。(对于公有方法,因为是提供给外部的接口,所以必须在方法中有相应的参数检验才能保证代码的健壮性)。
- 使用断言测试方法执行的前置条件和后置条件。
- 使用断言检查类的不变状态,确保任何情况下,某个变量的状态必须满足。(如:age属性应大于0小于某个合适值)。
-
不使用断言的场合
-
断言语句不是永远会执行,可以屏蔽也可以启用。
-
不要再public的方法里面检查参数是不是为null之类的操作。
-
例如
-
public int get(String s){ assert s != null; }
-
-
-
假如需要检查也最好通过if s = null 抛出NullPointerException来检查。
-
不要使用断言作为公共方法的参数检查,公共方法的参数永远都要执行。
-
断言语句不可以有任何边界效应,不要使用断言语句去修改变量和改变方法的返回值。
-
不要用assert来检查方法操作的返回值来判定方法操作的结果
例如 assert list.removeAll();这样看起来似乎没有问题 但是想想假如assert 被disable呢,那样他就不会被执行了 所以removeAll()操作就没有被执行 可以这样代替boolean boo = list.removeAl();assert boo;
-
字符串
-
// 构造方法和常量的直接赋值 这两种方法不同 // 为了节省资源java里会有一个字符串池,所以s1和s2指向的都是一块内存 String s1 = "abc"; String s2 = "abc"; System.out.println(s1 == s2); // true System.out.println(s1.equals(s2)) // true // 构造方法产生的字符串的指向一块内存是只有一个指针的 String s1 = "abc"; String s2 = new String("abc"); System.out.println(s1 == s2); // false System.out.println(s1.equals(s2)) // true
-
常用的字符串处理方法
注:字符串的方法使用后的返回值是字符串按照该方法操作之后的结果
-
字符串连接
concat(String str)
- “+”运算符
-
字符串查找
-
indexOf (String str)
例:
.indexOf(str);
找
s
中str
的第一个位置 -
lastIndexOf(String str)
例:
s.lastIndexOf(str);
找
s
中str
的最后一个位置 -
charAt(int indexOf)
例:
s.charAt(i);
找
s
中下标为i
的字符串 -
startsWith(String prefix)
例:
s.startWith(str)
判断
s
是否以str
开头
-
-
字符串分割
split(String regex)
:字符串分割compareTo(String str)
:字符串比较equalslgnoreCase(String str)
:忽略大小写
-
字符串替换
-
replace(char oldChar, char newChar)
把
oldChar
用newChar
替换
-
-
字符串求子串
-
substring(int beginIndex, int endIndex)
求下标
beginIndex
到endIndex - 1
的内容
-
-
字符串大小写转换
toUpperCase()
: 小写转大写ToLowerCase()
:大写转小写
-
-
StringBuffer类
- 字符串变量
- 线程安全
synchronized
的实现原理是在对象头里加锁
-
StringBuilder类
- 字符串变量
- 线程不安全
-
StringTokenizer类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yk07Wc1w-1605661125194)(Java笔记.assets/image-20201118084823085.png)]