slacr_

Just to record my life and thoughts.
笔记/编程/杂乱/极简

[Java笔记]基础

Apr 24, 2023Java2236 words in 15 min

Java笔记

Java起源

Java语言最初是由美国Sun Microsystems公司的James Gosling等人开发的一种面向对象程序设计语言。Java的起源可以追溯到20世纪90年代初.Java语言于1995年5月23日正式发布。Java语言具有面向对象、平台独立、安全性以及可以开发一种称为Applet程序的特点.

Java是简单的 (simple)、面向对象的 (object oriented)、分布式的 (distributed)、解释型的 (interpreted)、健壮的 (robust)、安全的 (secure)、体系结构中立的(architecture neutral)、可移植的 (portable)、高性能的(high performance)、 多线程的 (multithreaded) 和动态的 (dynamic)。

Java平台和开发环境

Java平台有三大版本,分别代表Java 的三个应用领域

  • Java标准版 (Java Standard Edition,Java SE): 用来开发客户端的应用程序,应用程序可以独立运行或作为 Applet在 Web 浏览器中运行
  • Java企业版 (Java Enterprise Edition,Java EE): 用来开发服务器端的应用程序。例如,Java Servlet和JSP(JavaServer Pages), 以及 JSF(JavaServer Faces)。
  • Java 微型版 (Java Micro Edition,Java ME): 用来开发移动设备(如手机)上运行的应用程序。

JDK/JRE/JVM

JVM Java Virtual Machine,JVM, 一种运行字节码的应用程序.
两个发行包:
JRE Java Runtime Environment, 包括 JVM 和核心类库,最适合用来运行字节码。如果只需运行 Java 程序,就只需安装JRE。
JDK Java Development Toolkit, 它包括 JRE, 外加一个编译器和其他工具。它是编译和运行 Java程序的必备软件

字节码与平台独立

在Java编程中,源代码被编译成字节码 (bytecode)。字节码不是本地机代码,所以它不能直接运行。字节码只能在 Java 虚拟机上运行。 JVM 是一种解释字节码的本机应用程序。JVM 在众多平台上都可用,从而使 Java 成为一种跨平台的语言,进而实现“编写一次,到处运行”。

CMD编译运行

1
2
javac <filename.java>
java <filename>

Java标识符和关键字

Java标识符定义

  1. 包名、类名、方法名、参数名、变量名等,这些符号被称为标识符。
  2. 标识符可以由字母、数字、下划线_ 和 美元符号 $ 组成
  3. 标识符不能以数字开头,不能是java中的关键字。
  4. 首字符之后可以是字母(A­Z 或者 a­z)、下划线_ 、美元符号 $ 或数字的任何字符。
  5. Java 区分大小写.
  6. 不可以使用关键字和保留字作为标识符,但标识符中能包含关键字和保留字。
  7. 标识符不能包含空格。

这里的字母指的是 Unicode 编码字符集, 可以表示世界各国的语言符号.

Java标识符规则

  1. 包名所有字母必须小写。例如:cn.com.test
  2. 类名和接口名每个单词的首字母都要大写。例如:ArrayList
  3. 常量名所有的字母都大写,单词之间用下划线连接。例如:DAY_OF_MONTH 变量名和方法名的第一个单词首字母小写,从第二个单词开始,每个单词首字母大写。例如:lineName、getLingNumber
  4. 在程序中,应该尽量使用有意义的英文单词来定义标识符,使得程序便于阅读。

关键字

数据类型 boolean、int、long、short、byte、float、double、char、class、interface、enum、void
流程控制 if、else、do、while、for、switch、case、default、break、continue、return
异常处理 try、catch、finally、throw、throws
修饰符 public、protected、private、final、void、static、strict、abstract、transient、synchronized、volatile、native
类与类之间关系 extends、implements
建立实例及引用实例 this、supper、instanceof、new
导包 package、import

保留字
Java版本尚未使用,但以后版本可能会作为关键字使用。

goto、const、byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var

注意:java中true、false、friendly和null不属于关键字,也不是保留字,它们只是显式常量值,但是你在程序中不能使用它们作为标识符。
java关键字和保留字都是小写。即null是关键字,NULL不是关键字;TRUE、FALSE也不是关键字。
sizeof 是 C/C++ 中的方法,Java 中并没有这个方法,也没有该关键字 或 保留字

数据类型

java中没有无符号数

字面值和常量

字面值/字面量(literals)是某种类型值的表示形式.
常量(constant)是在程序运行过程中,其值不能被改变的量。常量实际上是一个由 final 关键字修饰的变量,一旦为其赋值,其值在程序运行中就不能被改变.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class iterals {
public static void main(String[] args) {
final int dec = 10;
final int bin = 0b0110;
final int oct = 021;
final int hex = 0x31;

Scanner scanner = new Scanner(System.in);
System.out.println(dec); // 10
System.out.println(bin); // 6
System.out.println(oct); // 17
System.out.println(hex); // 49

final char c = '\141';
System.out.println(c); // a , \三个八进制数表示字符

final float f = 1234_1234_5678.1234F; // Java7开始数值型字面量可以用下划线分组
System.out.println(f);
}
}

运算符优先级

字符串拼接

1
2
3
4
5
6
7
public static void main(String[] args) {
System.out.println(9 + 10 + "---");
// 拼接字符串从左往右 19---
System.out.println("==" + 'k' + false);
// ==kfalse
// 注意和只有和字符串拼接才会隐式转换为字符串输出, 如果一个数字和字符拼接会转换成ASCII码的加法, '0'对应ASCII码48
}

知识点

  1. 与 C/C++语言不同, Java的布尔型数据不能与其他任何数据类型相互转换,即 false 和 true不对应于0和非0的整数值。

  2. java的源文件名要和类名一样

  3. 逻辑运算符的操作数只能是boolean, && 与 & 的区别, 前者属于短路运算符.

  4. >>> 无符号右移.

  5. println()输出结果后自动换行
    print() 输出结果不换行
    printf()和C一样, 按照格式字符串输出
    next() 遇到回车才停止

  6. 自动类型提升

    1
    2
    3
    4
    5
    6
    7
     public static void main(String[] args) {
    byte b1 = 20;
    byte b2 = 30;
    byte bs = (byte)(b1 + b2);
    // byte short char 在使用的时候会被先转换为int 使用(type)(statement)完成强制转换
    System.out.println(bs);
    }
  7. java中的switch

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("please input the order of game you wanna play/n");
    System.out.println("1. DOTA, 2. LOL, 3. DNF, 4.AC/n");
    byte game;
    game = sc.nextByte();
    switch (game) {
    // 这里Switch括号内的待匹配值为byte short int char
    // JDK5 以后可以是枚举, JDK7 以后可以是String
    // case值不能重复 只能是字面量
    case 1:
    System.out.println("DOTA running");
    break;
    case 2:
    System.out.println("LOL launching");
    break;
    case 3:
    System.out.println("DNF loading");
    break;
    case 4:
    System.out.println("AC is nice");
    break;
    default:
    System.out.println("game is boring");
    break;
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     public static void main(String[] args) {
    // JDK 12 switch case 新写法 -> {} 省略:和break
    int num = 1;
    switch (num) {
    case 1,2 -> System.out.println(1);
    // 多个case可以逗号分隔写在一起
    case 3 -> {
    System.out.println(33);
    }
    default -> {
    System.out.println("default");
    }
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public static char NumToRome(char n){
    // Ⅰ-1、Ⅱ-2、Ⅲ-3、Ⅳ-4、Ⅴ-5、Ⅵ-6、Ⅶ-7、Ⅷ-8、Ⅸ-9
    n = switch (n){ // JDK 12 后的新特性, 可以用变量接受switch的值
    case '1' -> 'Ⅰ';
    case '2' -> 'Ⅱ';
    case '3' -> 'Ⅲ';
    case '4' -> 'Ⅳ';
    case '5' -> 'Ⅴ';
    case '6' -> 'Ⅵ';
    case '7' -> 'Ⅶ';
    case '8' -> 'Ⅷ';
    case '9' -> 'Ⅸ';
    default -> ' ';
    };
    return n;
    }
  8. Java中的break和continue可以加一个标签以调出多层循环, 像C中goto那样. 但不能跳转到不相关的标签块.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     public static void main(String[] args) {
    int[][] arr = new int[10][10];
    there:
    for (int i = 0; i < arr.length; i++) {
    for (int j = 0; j < arr.length; j++) {
    if((i*10 + j) == 50) continue there;
    arr[i][j] = i*10 + j;
    System.out.printf("%d\t", arr[i][j]);
    }
    System.out.println();
    }
    }
  9. java中没有sizeof运算符, C/C++中 sizeof 最初设计来是为了兼容不同设备的, 但java因为有JVM解决了这个问题, 所以不需要sizeof运算符.

  10. java中浮点运算结果可能溢出, 但不会溢出导致异常, 下溢结果为0, 上溢结果为Infinity 或 -Infinity, 出现没有意义的结果显示NaN

  11. main方法中的参数 String[] args 原先是用来接收键盘参数的, 现在已经不用, 可以在IDE中配置configuration

  12. 指定环境变量时需要指定到程序所在目录; windows在指定文件夹打开cmd可以直接在路径栏输入cmd回车.

参考

  1. 《Java程序设计(第3版)》 IBSN 9787302485520
  2. Java API 文档
  3. Java标识符和关键字(超详细)
  4. JAVA合法标识符
  • Author:

    slacr_

  • Copyright:

  • Published:

    April 24, 2023

  • Updated:

    April 24, 2023

Buy me a cup of coffee ☕.

1000000