Java 关键字
static:
主要的使用情况:
1.成员变量 2.成员方法 3.代码块 4.内部类
不可变类(immutable class)
定义: 指当创建了这个类的实例后,就不允许修改它的值了。
哪些类属于不可变类?
答: 所有基本类型的包装类以及String类。
异常处理
定义: 异常是指程序运行时所发生的非正常情况或者错误。
- 异常的基类为 java.lang.Throwable。子类有Error和Exception两大类。
- Error: 表示程序运行期间出现了非常严重的错误,并且该错误是不可恢复的,会导致程序终止运行。(OurOfMemoryError、TheardDeath)
- Exception 异常又分为检查异常(checked exception) 和 运行时异常(runtime exception)。
1.检查异常(checked exception): IO异常和SQL异常。
2.运行时异常(runtime exception): 空指针异常(NullPointerException)、类型转换异常(ClassCastException)、数组越界异常(ArrayIndexOutOfBoundsException)、算数异常(ArithmeticException)等等。
关于包装类
Java的基本数据类型都有自己的包装类。提到包装类不得不提一个概念就是自动装包和拆包。
Java 啥是自动拆包和装包?–>在SE5之后提供了自动的装箱和拆箱机制。基本数据类型可以和与其对应的包装类之间自动进行转换。下面以int的包装类Integer进行介绍。
在对封装类进行运算时,会自动进行拆包(intValue方法)。计算完成之后又会重新装包(valueOf方法)。
intValue方法:
public int intValue() {
return value;
}
valueOf方法:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
拆包不说了,来说说装包valueOf。当输入的数字范围在[-128,127]之间时,返回的就是一个int型变量。当范围超出时就会被包装为一个Integer对象。所以Integer的直接赋值就相当于调用valueOf方法。
/*
以下这几种情况 数字在范围内,变量就不会去开辟新的空间。
g1 == g2 返回为true
*/
Integer g1 = 1;//相当于↓
Integer g2 = Integer.valueOf(1);//不相当于↓
Integer g3 = new Integer(1);//会开辟一个新的地址
/*
以下这几种情况 数字不在范围内,变量就会去开辟新的空间。
g1,g2,g3 的地址各不相同,==判断返回为false
*/
Integer g1 = 128;//相当于↓
Integer g2 = Integer.valueOf(128);//相当于↓
Integer g3 = new Integer(128);
和int类型进行比较时,会对包装类进行拆包。因此无论值是多少,比较的结果都是true。
Integer a = 128;
int b = 128;
System.out.println(a == b);//返回true
Java IO
具体的balabala概念去看其他微博。
System.in
要从键盘上得到输入内容就得去访问System.in。System.in 是一个InputStream,所以要怎么样获得输入的内容就可以有方法得到了。
一般来说,有两种方法来获得。第一个就是通过Scanner,第二就是通过Java IO。
Scanner
Scanner是java.util包下的类,用于处理输入。其构造函数有以下这几种输入选项:
其中就有一个就是InputStream,这正是System.in的类型。那就不管三八二十一的,放进去再说。下面内容也不想说了,直接看代码:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String all = scanner.nextLine();//返回值s为从键盘上输入的内容,一直到检测到回车为止
System.out.println(all);
String part1 = scanner.next();//返回值s为从键盘上输入的内容,一直到第一个空格为止,此时scanner对象中可能还存在内容
System.out.println(part1);
String part2 = scanner.next();//输入余下内容,同样是到空格分隔为止
System.out.println(part2);
String part3 = scanner.next();//如果scanner内为空,则等待再次输入
System.out.println(part3);
//其他api不说了
}
Java IO
使用到Java输入输出流,就得简单的了解了解字符流和字节流。下面讲讲思路:
- 首先使用System.in,是一个InputStream类型的字节流。我们需要得到输入的内容,当然是要用字符来显示。所以字符流和字节流的转换桥梁就是InputStreamReader类,看名字也可以看得出InputStream→Reader。
- 然后这个桥梁并不能直接使用,看官方api可以发现:为了最大的效率,请考虑在BufferedReader中包装一个InputStreamReader。 例如:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
- emm没啥好说的了。
直接看下面代码吧
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
System.out.println(s);
}
读取键盘输入的方法 就是这些。
输入总结
输入一个数组
得到输入的内容已经在上面叙述了,下面讲讲怎么讲一个字符串转换为一个数组。
假如需要输入的第一个内容为一个整数,表示数组的长度,输入的第二个内容为数组,数字用空格分开。
在这里插入代码片