实习前的JAVA复习

168 阅读6分钟

大三,到了求职的时间,需要用Java写项目,但是用过python后已经很久没有动过C++和Java了,所以复习一遍,写成笔记,也需要能够帮助到同样需要一天快速过一遍Java知识点的你。

基本知识

  1. Java的代码(文本,一般在src文件夹内)的后缀名为.java,经过JVM编译后生成的二进制文件后缀为.class
  2. Java文件(.java)的文件名和公有类(public)类名必须保持一致
  3. JAVA语言是一种编译型-解释型语言,同时具备编译特性和解释特性。编译特性指Java程序(.java)要被Java编译器统一编译成字节码文件(.class);解释特性指字节码文件(.class)需要被JVM翻译成本地的机器码后才能执行(边解释,边执行)。
  4. Java标识符(Identifier)以字母,$或下划线开始。

注释

  • 单行注释://
  • 多行注释:以/*开始,以*/结束。
  • 文档注释:以/**开始,以**/结束。允许你在程序中嵌入关于程序的信息,如:
/**
 * @author: HuntChen
 * @version: 1.0
 */

数据类型

Java是一种强类型语言,要求变量先定义(声明)后使用。(相对的,python是一种弱类型语言,变量可以不仅声明就开始使用。)

基本类型(primitive type)

  • byte 1个字节
  • short 2个字节
  • int 4个字节
  • long 8个字节
  • float 4个字节
  • double 8个字节
  • char 2个字节
  • boolean 1位 P.S.整数类型又分为unsign和sign类型,其能表示数据范围有差别。有符号数的能表示最小的负数的绝对值大于其能表示的最大的正数。

引用类型(reference type)

  • 接口
  • 数组

类型转换

以下的箭头左边的数据类型可以直接赋值转化为右边的数据类型,而不需要担心溢出问题。(小->大)。 byte->short->int->long
float->double、 如果要逆箭头转换或者浮点类型与整数类型相互转换,需要使用(type)variabel,且可能会造成溢出错误和数据截断。如下例子:

public class TypeConvert {
    public static void main(String[] args) {
        int a = 128;
        byte b = (byte)a;
        System.out.println("int类型(4字节)变量:"+a);
        System.out.println("转换为byte类型(1字节)变量:"+b+"(发送溢出)");

    }
}

P.S.无论如何,完全不同的类型是不能强制转换的,如int类型不能转换为boolean类型。

变量的作用域

类变量(静态变量)

独立于方法之外的变量,用 static 修饰。无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。

实例变量

在方法外,类里面。同样独立于方法之外的变量,但是不用用 static 修饰。 类变量和实例变量都是成员变量,声明在类中,不属于任何一个方法,但从属于对象,作用域是整个类。
如果不主动进行初始化,则会被系统初始化为默认值。(数值型一般是0Boolean类型为false

局部变量

在方法类声明、定义和初始化。

思考:一个类的两个实例,如果对其中的一个实例进行操作,修改其对应的成员变量,那么另一个实例对应的成员变量会改变吗? -和static修饰符有关

其他补充

变量的修饰符:

  • staticstatic关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为static变量
  • final:类似与C的const,变量一旦赋值后,不能被重新赋值。被 final修饰的实例变量必须显式指定初始值。final修饰符通常和static修饰符一起使用来创建类常量。
  • 修饰符无先后顺序

包机制

用于更好的组织类,区别类名的命名空间

JavaDoc

javadoc命令用于生成API文档。(DOS命令)

输入输出

Java中的输入是依靠java.util.Scanner实现的,下面使用一个简单的例子进行说明:

import java.util.Scanner;

public class Input {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入年龄");
        int ages = scanner.nextInt();
        System.out.println("输入年龄");
        double wage = scanner.nextDouble();
        System.out.println("年龄: "+ ages);
        System.out.println("工资: "+ wage);
    }
}

下面是这个程序的输入和输出样例:

0
0
年龄: 0
工资: 0.0

Scanner提供next()方法和nextLine方法,用于读取缓冲区的字符串。其中,next()方法仅读取缓冲区数据到下一个空格前,而nextLine()方法则会读取缓冲区数据知道下一个回车,下面是一个小例子。

import java.util.Scanner;

public class Input {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in)

        System.out.println("输入一个字符串,下面讲以next()方法读取缓存数据并输出。");
        String s1 = scanner.next();
        System.out.println(s1);

        System.out.println("输入一个字符串,下面讲以nextLine()方法读取缓存数据并输出。");
        String s2 = scanner.nextLine();
        System.out.println(s2);
    }
}

其输入输出如下

输入一个字符串,下面讲以next()方法读取缓存数据并输出。
这是第一个空格前的字符串 这是一个空格后的字符串 这是第二个空格后的字符串 这是第三个空格后的字符串
这是第一个空格前的字符串
输入一个字符串,下面讲以nextLine()方法读取缓存数据并输出。
 这是一个空格后的字符串 这是第二个空格后的字符串 这是第三个空格后的字符串

Process finished with exit code 0

可以看到,允许的输出只有一行。输入为这是第一个空格前的字符串 这是一个空格后的字符串 这是第二个空格后的字符串 这是第三个空格后的字符串\n next()方法读取到了第一个空格前的数据,所以打印出了这是第一个空格前的字符串,而缓冲区内剩余的 这是第二个空格后的字符串 这是第三个空格后的字符串\n被后续的nextLine()读取并输出。

此外,Scanner还提供nextInt()nextFloat()nextDouble()...等方法以读取其他的数据,并且又hasNextInt()hasNextFloat()hasNextDouble()...等方法判断下一个对应数据是否存在。

P.S. IO流类的实例十分占用资源,需要手动关闭(scanner.close()) 思考:如果在缓冲区,一个double类型的数据前还有int类型的数据,那么调用scanner.hasNextDouble()会返回true还是false

Java流程控制

流程控制就只记录不太熟的了。

switch选择结构

直接上例子:

import java.util.Scanner;

public class TrySwitch {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int cv = scanner.nextInt();
        switch (cv){
            case 0:
                System.out.println("输入是0");
                break;
            case 1:
                System.out.println("输入是1");
                break;
            default:
                System.out.println("输入是其他");
        }
    }
}

P.S. JDK7之后Switch语句也可以支持字符串比较。 注意:如果不使用break语句,会顺序执行匹配成功后的case后的所有语句。

增强for循环

主要用于遍历数组和集合,格式如下:

for(declear statement : arrary or set){
    statement;
}

举个例子:

public class EnhancedFor {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6};
        for(int i : arr){
            System.out.println(i);
        }
    }
}

while循环

在Java内,有两种while循环,一种是普通的,即“当型循环”,如下

while(boolean_expression){
    statement;
}

一种是do...while循环,即”直到型循环“,如下:

do{
    statement;
}while(boolean_expression)

直到型循环内的语句至少会执行一次。