Java 关键字

static:
    主要的使用情况:
    1.成员变量  2.成员方法  3.代码块 4.内部类

不可变类(immutable class)

定义: 指当创建了这个类的实例后,就不允许修改它的值了。
哪些类属于不可变类?
答: 所有基本类型的包装类以及String类。

异常处理

定义: 异常是指程序运行时所发生的非正常情况或者错误。

  • 异常的基类为 java.lang.Throwable。子类有ErrorException两大类。
  • 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包下的类,用于处理输入。其构造函数有以下这几种输入选项:

java怎么输出横线分隔符_System


  其中就有一个就是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输入输出流,就得简单的了解了解字符流和字节流。下面讲讲思路:

  1. 首先使用System.in,是一个InputStream类型的字节流。我们需要得到输入的内容,当然是要用字符来显示。所以字符流和字节流的转换桥梁就是InputStreamReader类,看名字也可以看得出InputStream→Reader。
  2. 然后这个桥梁并不能直接使用,看官方api可以发现:为了最大的效率,请考虑在BufferedReader中包装一个InputStreamReader。 例如:
BufferedReader in  = new BufferedReader(new InputStreamReader(System.in));
  1. 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);
}

读取键盘输入的方法 就是这些。

输入总结

输入一个数组

  得到输入的内容已经在上面叙述了,下面讲讲怎么讲一个字符串转换为一个数组。
  假如需要输入的第一个内容为一个整数,表示数组的长度,输入的第二个内容为数组,数字用空格分开。

在这里插入代码片