作者:小啊小二饼(iconfont)

🌑

Spaghetti.ink

Appreciation, Modesty, Persistence


JavaSE-Introduction

JDK, JRE and JVM

什么是JVM?

❓首先来考虑一个问题,我们编写Java程序以及编译之后是直接交给计算机去运行的吗

🙅不是的,实际上,我们是通过JVM,JVM再将编译后的字节码交给计算机。

所以,我们让Java程序跑起来的步骤实际上是

  1. Java Code —- Compiler —-> Java Bytecode 先由编译器将代码编译为字节码
  2. Java Bytecode —- JVM —-> Machine code 再由JVM将字节码转换为机器码

总结:总的来说,我们编写的代码由编译器编译为字节码,JVM在根据不同的操作系统(平台),将字节码转为机器码以保证程序正确运行。所以说,Java是 plate-form independent的。

how-java-program-runs

什么是JRE?

JRE实际上是JVM的一个超集,因为它出了包含JVM以外,它还提供了一些Java类包以及其他的一些必要模块。如果你只需要运行Java程序,但不想编程Java程序,那么JRE是你最好的选择。

java-realtime-enviornment_0

什么是JDK?

JDK(Java Development Kit)是一个整合的开发工具,当你下载了JDK之后,JRE也会同时下载。同时,它还包含(compilers, JavaDoc, Java Debugger, etc)。

image-20210415151505219

JDK, JRE, JVM的关系:

jdk-jre-jvm


Variables and Literals

变量

一个变量存储在内存中以维持数据,为了区分保存的位置,每一个变量都有一个唯一的标识(变量名) identifier

Identifier的格式:

  • Identifiers 不能是一个关键字
  • Identifiers 是大小写敏感的
  • 必须以字母, $ 或者 _开头,开头不能是数字
  • 空格是不被允许的
  • 不能使用特殊符号 such as @, #, and so on.
关键字
abstract assert boolean break byte
case catch char class const
continue default do double else
enum extends final finally float
for goto if implements import
instanceof int interface long native
new package private protected public
return short static strictfp super
switch synchronized this throw throws
transient try void volatile while

Java是静态类型语言,也就是说所有的变量在赋值前都需要被声明

int speedLimit;
speedLimit = 80;

Java语言中有四种类型的变量

  • 实例变量 Instance Variables (Non-Static Fields,对于每个对象值都是唯一的)
  • 类变量 Class Variables (Static Fields,对于类来说值是共享的此处容易产生误解)
  • 局部变量 Local Variables
  • 参数变量 Patameters

字面量

字面量用于标识固定的数值,在代码中他们可以被直接使用

int a = 1;
float b = 2.5;
char c = 'F';

这里的1,2.5以及F就是字面量,Java中有以下几种字面量

  1. Boolean 布尔
  2. Integer 整型
  3. Float-point 浮点数
  4. Character 字符
  5. String 字符串 - 字符串是一个字符的序列,通过双引号使用

Data Types

Java有8个原始数据类型,其他的为引用类型

Primitive Data Types

  1. boolean type:true or false
  2. byte type:from -128 to 127, 8-bit
  3. short type:from -32768 to 32767, 16-bit

  4. int type:from $-2^{31}$ to $2^{31}-1$, 32-bit

  5. long type:from $-2^{63}$ to $2^{63}-1$, 64-bit

  6. double type:64-bit floating-point
  7. float type:32-bit floating-point
  8. char type:16-bit Unicode character from \u0000​ to \uffff

❓既然float和double都是浮点数,那么我们知道字面量是double还是float呢?

To tell the compiler to treat -42.3 as float rather than double, you need to use f or F.

Notice that, we have used -42.3f instead of -42.3in the above program. It’s because -42.3 is a double literal.

class Main {
  public static void main(String[] args) {
    	
    float number = -42.3f;
    System.out.println(number);  // prints -42.3
  }
}

Java Operators

Java的运算操作主要分为5类

  • Arithmetic Operators 算数运算操作
Operator Operation
+ Addition 加法
- Subtraction 减法
* Multiplication 乘法
/ Division 除法
% Modulo Operation (Remainder after division) 求余

如果我们对两个整数进行除法操作,那么结果为整数(舍去分数)

如果操作中其中一个是浮点数,那么结果也为浮点数

  • Assignment Operators 赋值运算操作
Operator Example Equivalent to
= a = b; a = b;
+= a += b; a = a + b;
-= a -= b; a = a - b;
*= a *= b; a = a * b;
/= a /= b; a = a / b;
%= a %= b; a = a % b;
  • Relational Operators 关系运算操作
Operator Description Example
== Is Equal To 3 == 5 returns false
!= Not Equal To 3 != 5 returns true
> Greater Than 3 > 5 returns false
< Less Than 3 < 5 returns true
>= Greater Than or Equal To 3 >= 5 returns false
<= Less Than or Equal To 3 <= 5 returns false
  • Logical Operators 逻辑运算操作
Operator Example Meaning
&& (Logical AND) expression1 && expression2 true only if both expression1 and expression2 are true
` ` (Logical OR) expression1 **` `** expression2 true if either expression1 or expression2 is true
! (Logical NOT) !expression true if expression is false and vice versa
  • Unary Operators 一元运算符
Operator Meaning
+ Unary plus: not necessary to use since numbers are positive without using it
- Unary minus: inverts the sign of an expression
++ Increment operator: increments value by 1
-- Decrement operator: decrements value by 1
! Logical complement operator: inverts the value of a boolean
  • Bitwise Operators 位运算符
Operator Description
~ Bitwise Complement
<< Left Shift
>> Right Shift
>>> Unsigned Right Shift
& Bitwise AND
^ Bitwise exclusive OR

实例运算

instanceofstr instanceof String 判断str是不是String类的实例

三元运算

variable = Expression ? expression1 : expression2

Basic Input and Output

Java的标准输出

  • System.out.println()
  • System.out.print()
  • System.out.printf()
  • print() - It prints string inside the quotes.
  • println() - It prints string inside the quotes similar like print() method. Then the cursor moves to the beginning of the next line.
  • printf() - It provides string formatting (similar to printf in C/C++ programming).

Java的标准输入

import java.util.Scanner;

// create an object of Scanner
Scanner input = new Scanner(System.in);

// take input from the user
int number = input.nextInt();

由Scanner类创建的 input 对象拥有类似nextInt的方法

  • nextLong()
  • nextFloat()
  • nextDouble()

同时在结束输入后不能忘记调用close()方法关闭对象


Java Package

你可以把包看成一个容器,它把各种类型(类、接口、枚举、注解)组合在一起。举一个例子,如果ResultSet接口在java.sql的包中,如果你想要使用这个接口,那么你就需要从包中引入import java.sql.ResultSet

❓为什么要引入包的概念呢?

🙋‍♂️:包就像C中的命名空间一样,有了命名空间我们就可以区分两个命名相同的类或者接口。比如,我们有两个Date类型:java.util.Datejava.sql.Data,有了包我们就在避免冲突的前提下,同时使用这两个类。

Built-in Package

我们在下载JDK的时候,同时也下载了一些包:java.lang, java.util, java.io,我们不需要重新去下载这些包,因为他们是(自带的)。e.g. import java.util.ArrayList;

User-defined Package

通过package关键字,我们可以定义一个包

package packageName;

Java使用系统的相对文件路径来定义一个包

# 假设我们的文件结构如下
└── com
  └── test
    └── Test.java

那么对于Test.java这个类,我们的包就为package com.test,通常我们用域名来创建包,以保证唯一。

Create Package

我们可以通过IntelliJ IDEA右键生成包来创建包

本文由 Frank采用 署名 4.0 国际 (CC BY 4.0)许可

— 2021年4月12日

本文总阅读量


本站总访问量