[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/UserXSX/JavaGuide/main/docs/java/basis/java-basic-questions-01.md [Back]  [Original]

--- title: Java() category: Java description: JavaJavaJVM/JDK/JREJava tag: - Java head: - - meta - name: keywords content: Java,JVM,JDK,JRE,Java SE,,Java,,,,Java --- ## ### Java ? 1. 2. 3. Java 4. C++ Java 5. 6. Java 7. Just In Time Java 8. 9. 10. > ** [issue#544](https://github.com/Snailclimb/JavaGuide/issues/544)**C++11 2011 C++ WindowsLinuxmacOS `std::thread``std::async` Write Once, Run Anywhere Java Java JDK Docker Java ### Java SE vs Java EE - Java SEJava Platform, Standard Edition: Java Java Java Java SE - Java EEJava Platform, Enterprise EditionJava Java SE ServletJSPEJBJDBCJPAJTAJavaMailJMS Java EE Java Web Java SE Java Java EE Java Java SE Java EE Web Java SE Java EE Java MEJava PlatformMicro EditionJava ME Java PDAJava ME ### JVM vs JDK vs JRE #### JVM Java Java Virtual Machine, JVM Java JVM WindowsLinuxmacOS JVM Java JavaGroovyKotlinJRubyClojure ... `.class` JVM WindowsMacLinux ![ Java ](https://oss.javaguide.cn/github/javaguide/java/basis/java-virtual-machine-program-language-os.png) **JVM JVM JVM** HotSpot VM JVM HotSpot VM J9 VMZing VMJRockit VM JVM JVM [Comparison of Java virtual machines](https://en.wikipedia.org/wiki/Comparison_of_Java_virtual_machines) [Java SE Specifications](https://docs.oracle.com/javase/specs/index.html) JDK JVM ![](https://oss.javaguide.cn/github/javaguide/java/basis/JavaSeSpecifications.jpg) #### JDK JRE JDKJava Development Kit Java Java JREJava Runtime Environment javac javadocjdbjconsolejavap JRE Java 1. **JVM** : Java 2. **Java Class Library** API I/O JRE Java JDK JRE Java Java Java API JDK Java JSP Servlet JDK Java Java JDK JDKJRE JVM ![jdk-include-jre](https://oss.javaguide.cn/github/javaguide/java/basis/jdk-include-jre.png) JDK 9 JDK JRE JDK 94 + [jlink](http://openjdk.java.net/jeps/282) ( Java 9 Java ) JDK 11 Oracle JRE [Java 9 ](https://javaguide.cn/java/new-features/java9.html) > JDK 94 Java jlink JDK Java jlink runtime JRE Java Java ### ?? Java JVM `.class` Java Java C C++RustGo Java **Java ** ![Java](https://oss.javaguide.cn/github/javaguide/java/basis/java-code-to-machine-code.png) `.class->` JVM () **JITJust in Time Compilation** JIT JIT Java **Java ** > > > - [ | Java - ](https://tech.meituan.com/2020/10/22/java-jit-practice-in-meituan.html) > - [ - ](https://mp.weixin.qq.com/s/4haTyXUmh8m-dBQaEzwDJw) ![Java](https://oss.javaguide.cn/github/javaguide/java/basis/java-code-to-machine-code-with-jit.png) > HotSpot (Lazy Evaluation) JIT JVM JDKJREJVMJIT ![JDKJREJVMJIT ](https://oss.javaguide.cn/github/javaguide/java/basis/jdk-jre-jvm-jit.png) JVM ![JVM ](https://oss.javaguide.cn/github/javaguide/java/basis/jvm-rough-structure-model.png) ### Java - ****[](https://zh.wikipedia.org/wiki/%E7%B7%A8%E8%AD%AF%E8%AA%9E%E8%A8%80) [](https://zh.wikipedia.org/wiki/%E7%B7%A8%E8%AD%AF%E5%99%A8) CC++GoRust - ****[](https://zh.wikipedia.org/wiki/%E7%9B%B4%E8%AD%AF%E8%AA%9E%E8%A8%80)[](https://zh.wikipedia.org/wiki/)interpret PythonJavaScriptPHP ![](https://oss.javaguide.cn/github/javaguide/java/basis/compiled-and-interpreted-languages.png) > [](https://zh.wikipedia.org/wiki/)[](https://zh.wikipedia.org/wiki/)[Java](https://zh.wikipedia.org/wiki/Java)[LLVM](https://zh.wikipedia.org/wiki/LLVM) > > [ | Java ](https://tech.meituan.com/2020/10/22/java-jit-practice-in-meituan.html) ** Java ** Java Java Java `.class` Java ### AOT AOT JDK 9 **AOT(Ahead of Time Compilation)** JIT C C++RustGo AOT JIT Java AOT Java AOT **JIT AOT ** | | JIT | AOT | | ---------------- | ------------------ | ---------------------------- | | **** | | | | **** | | | | **** | | | | **** | | | | **** | | | | **** | | | | **** | | ServerlessCLI | JIT vs AOT [JIT vs AOT] **AOT ****JIT ** AOT [GraalVM](https://www.graalvm.org/) GraalVM JDK JDK Java JVM JavaScriptPython JVM GraalVM AOT JIT GraalVM - [](https://mp.weixin.qq.com/s/4haTyXUmh8m-dBQaEzwDJw) - [ Native Spring&Dubbo AOT ](https://cn.dubbo.apache.org/zh-cn/blog/2023/06/28/%e8%b5%b0%e5%90%91-native-%e5%8c%96springdubbo-aot-%e6%8a%80%e6%9c%af%e7%a4%ba%e4%be%8b%e4%b8%8e%e5%8e%9f%e7%90%86%e8%ae%b2%e8%a7%a3/) ** AOT ** JIT AOT AOT AOT Java JNIJava Native Interface SpringCGLIB AOT CGLIB ASM `.class` AOT ASM JIT ### Oracle JDK vs OpenJDK OpenJDK Oracle JDK OpenJDK 2006 SUN Java OpenJDK2009 Oracle Sun OpenJDK Oracle JDKOracle JDK Java8 ~ Java11 OpenJDK Java 7 OpenJDK Oracle JDK Oracle JDK OpenJDK 7 Oracle Oracle 2012 > OpenJDK Oracle JDK > > - Oracle JDK OpenJDK 7 Oracle Java Java WebStart Rhino Oracle JDK Oracle JDK OpenJDK 1. ****OpenJDK Oracle JDK OpenJDK JDK SUN SUN Oracle Oracle Oracle Oracle Oracle SUN JDK Oracle Java Java Oracle Java Oracle JDK OpenJDK Oracle JDK Oracle JDK OpenJDK [https://github.com/openjdk/jdk](https://github.com/openjdk/jdk) 2. ****Oracle JDK JDK17 3 3 JDK8u221 OpenJDK 3. ****Oracle JDK OpenJDK Java Flight RecorderJFRJava Mission ControlJMC Java 11 OracleJDK OpenJDK OracleJDK 4. ****OpenJDK LTS OracleJDK LTS OpenJDK OracleJDK LTS 5. ****Oracle JDK BCL/OTN OpenJDK GPL v2 > Oracle JDK OpenJDK > > > > 1. OpenJDK Alibaba OpenJDK Dragonwell8[https://github.com/alibaba/dragonwell8](https://github.com/alibaba/dragonwell8) > 2. OpenJDK yum JDK OpenJDK Oracle JDK Oracle JDK JDK 8 > 3. OpenJDK Oracle JDK 6 OpenJDK 3 Oracle JDK OpenJDK Oracle JDK > > OpenJDK ![oracle jdk release cadence](https://oss.javaguide.cn/github/javaguide/java/basis/oracle-jdk-release-cadence.jpg) **Oracle JDK OpenJDK ** OpenJDK OpenJDK AWS Amazon Corretto Alibaba Dragonwell - BCL Oracle Binary Code License Agreement JDK - OTN Oracle Technology Network License Agreement11 JDK ### Java C++ ? C++ Java C++ C++ Java C++ - Java - Java C++ Java - Java (GC) - C ++ Java Java - ## ### Java 1. **** 2. **** 3. **** Java ![](https://oss.javaguide.cn/github/javaguide/java/basis/image-20220714112336911.png) () Clean Code > **** > > **** > > > > > > ```java > // check to see if the employee is eligible for full benefits > if ((employee.flags & HOURLY_FLAG) && (employee.age > 65)) > ``` > > > > ```java > if (employee.isEligibleForFullBenefits()) > ``` ### **** **** Java **** **** ### Java | | | | | | | | | | :------------------- | -------- | ---------- | -------- | ------------ | ---------- | --------- | ------ | | | private | protected | public | | | | | | | abstract | class | extends | final | implements | interface | native | | | new | static | strictfp | synchronized | transient | volatile | enum | | | break | continue | return | do | while | if | else | | | for | instanceof | switch | case | default | assert | | | | try | catch | throw | throws | finally | | | | | import | package | | | | | | | | boolean | byte | char | double | float | int | long | | | short | | | | | | | | | super | this | void | | | | | | | goto | const | | | | | | > Tips IDE > > `default` > > - `switch` `default` > - JDK8 `default` > - `default` `true`, `false`, `null` [https://docs.oracle.com/javase/tutorial/java/nutsandbolts/\_keywords.html](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html) ### 1 1Java (`++`) (`--`) `++` `--` - **** `++a` `--a`/`b = ++a` `a` 1 `b` - **** `a++` `a--`/`b = a++` `a` `b` `a` 1 **//** ```mermaid flowchart LR %% classDef step fill:#4CA497,color:#fff,rx:10,ry:10 classDef example fill:#E99151,color:#fff,rx:10,ry:10 subgraph Prefix[" ++a / --a"] direction TB style Prefix fill:#F5F7FA,stroke:#E0E6ED,stroke-width:1.5px P1["/"]:::step --> P2[""]:::step P3["b = ++a 2 = -2"]:::right end subgraph URight[" >>>"] style URight fill:#F5F7FA,stroke:#E0E6ED,stroke-width:1.5px U1[" n "]:::uright U2[" 0"]:::uright U3[""]:::uright U4["-8 >>> 2 = 1073741822"]:::uright end end linkStyle default stroke-width:1.5px,opacity:0.8 ``` Java - `> n` x 2 n - `>>>` : 0 `double``float` `int``long``short``byte``char``int` **** int / 32 %// 32 32%32=0/ 42 / 10 42%32=10 long / long 64 64 `x10``x >>>42``x >>> 10` **** ```java int i = -1; System.out.println("" + i); System.out.println("" + Integer.toBinaryString(i)); i |"continue"| Continue["
"] L3 -->|"break"| Break[""] L3 -->|""| L1 Continue --> L1 end Break --> AfterLoop[""] L1 -->|""| AfterLoop AfterLoop --> L4{{" return"}} L4 -->|""| Return[""] L4 -->|""| End[""] end classDef start fill:#E99151,color:#fff,rx:10,ry:10 classDef loop fill:#4CA497,color:#fff,rx:10,ry:10 classDef decision fill:#00838F,color:#fff,rx:10,ry:10 classDef alert fill:#C44545,color:#fff,rx:10,ry:10 class Start,End start class L1,L2,AfterLoop loop class L3,L4 decision class Continue,Break,Return alert linkStyle default stroke-width:1.5px,opacity:0.8 ``` ```java public static void main(String[] args) { boolean flag = false; for (int i = 0; i Numeric["6"] Root --> Char[""] Root --> Bool[""] Numeric --> IntType["4"] Numeric --> FloatType["2"] IntType --> byte["byte
8"] IntType --> short["short
16"] IntType --> int["int
32"] IntType --> long["long
64"] FloatType --> float["float
32"] FloatType --> double["double
64"] Char --> char["char
16"] Bool --> boolean["boolean
1"] classDef root fill:#E99151,color:#fff,rx:10,ry:10 classDef category fill:#00838F,color:#fff,rx:10,ry:10 classDef type fill:#4CA497,color:#fff,rx:10,ry:10 class Root root class Numeric,Char,Bool,IntType,FloatType category class byte,short,int,long,float,double,char,boolean type linkStyle default stroke-width:1.5px,opacity:0.8 ``` 8 | | | | | | | :-------- | :--- | :--- | :------ | -------------------------------------------------------------- | | `byte` | 8 | 1 | 0 | -128 ~ 127 | | `short` | 16 | 2 | 0 | -32768-2^15 ~ 327672^15 - 1 | | `int` | 32 | 4 | 0 | -2147483648 ~ 2147483647 | | `long` | 64 | 8 | 0L | -9223372036854775808-2^63 ~ 92233720368547758072^63 -1 | | `char` | 16 | 2 | 'u0000' | 0 ~ 655352^16 - 1 | | `float` | 32 | 4 | 0f | 1.4E-45 ~ 3.4028235E38 | | `double` | 64 | 8 | 0d | 4.9E-324 ~ 1.7976931348623157E308 | | `boolean` | 1 | | false | truefalse | `byte``short``int``long` 1 0 1 1 1 `boolean` JVM 1 Java Java Java 2.2 **** 1. Java `long` **L** 2. Java `float` **f F** 3. `char a = 'h'`char :`String a = "hello"` : `Byte``Short``Integer``Long``Float``Double``Character``Boolean` ### - **** - **** Java `static` Java - **** - **** `null` `null` - ****`==` `==` `equals()` **** HotSpot JIT **** // ```java public class Test { // int a = 10; // static JDK 1.7 1.8 // static int b = 20; public void method() { // int c = 30; static int d = 40; // static } } ``` ### Java `Byte`,`Short`,`Integer`,`Long` 4 **[-128127]** `Character` **[0,127]** `Boolean` `TRUE` or `FALSE` `Integer` JVM `-XX:AutoBoxCacheMax=` -128 OOM `Byte`,`Short`,`Long` ,`Character` `-XX:AutoBoxCacheMax` JVM `Boolean` `TRUE` `FALSE` **Integer ** ```java public static Integer valueOf(int i) { if (i >= IntegerCache.low && i F["int "] end subgraph Boxing[""] direction LR style Boxing fill:#F5F7FA,stroke:#E0E6ED,stroke-width:1.5px A["int i = 10"] -->|""| B["Integer.valueOf(10)"] B --> C["Integer "] end end classDef core fill:#4CA497,color:#fff,rx:10,ry:10 classDef highlight fill:#E99151,color:#fff,rx:10,ry:10 class A,D core class C,F highlight linkStyle default stroke-width:1.5px,opacity:0.8 ``` ```java Integer i = 10; // int n = i; // ``` ```java L1 LINENUMBER 8 L1 ALOAD 0 BIPUSH 10 INVOKESTATIC java/lang/Integer.valueOf (I)Ljava/lang/Integer; PUTFIELD AutoBoxTest.i : Ljava/lang/Integer; L2 LINENUMBER 9 L2 ALOAD 0 ALOAD 0 GETFIELD AutoBoxTest.i : Ljava/lang/Integer; INVOKEVIRTUAL java/lang/Integer.intValue ()I PUTFIELD AutoBoxTest.n : I RETURN ``` `valueOf()` `xxxValue()` - `Integer i = 10` `Integer i = Integer.valueOf(10)` - `int n = i` `int n = i.intValue()`; **** ```java private static long sum() { // long Long Long sum = 0L; for (long i = 0; i 0 0.4 * 2 = 0.8 -> 0 0.8 * 2 = 1.6 -> 1 0.6 * 2 = 1.2 -> 1 0.2 * 2 = 0.4 -> 0 ... ``` [](http://kaito-kidd.com/2018/08/08/computer-system-float-point/) ### `BigDecimal` `BigDecimal` ```java BigDecimal a = new BigDecimal("1.0"); BigDecimal b = new BigDecimal("1.00"); BigDecimal c = new BigDecimal("0.8"); BigDecimal x = a.subtract(c); BigDecimal y = b.subtract(c); System.out.println(x); /* 0.2 */ System.out.println(y); /* 0.20 */ // System.out.println(Objects.equals(x, y)); /* false */ // compareTo0 System.out.println(0 == x.compareTo(y)); /* true */ ``` `BigDecimal` [BigDecimal ](https://javaguide.cn/java/basis/bigdecimal.html) ### long Java 64 long ```java long l = Long.MAX_VALUE; System.out.println(l + 1); // -9223372036854775808 System.out.println(l + 1 == Long.MIN_VALUE); // true ``` `BigInteger` `int[]` `BigInteger` ## ### ![](https://oss.javaguide.cn/github/javaguide/java/basis/java-basis-variables-member-variable-vs-local-variable.png) - **** `public`,`private`,`static` `static` `final` - **** `static` `static` - **** - ****: `final` **** **** - **** - **** `setter` **** bug Java null 0**** ```java public class VariableExample { // private String name; private int age; // public void method() { int num1 = 10; // String str = "Hello, world!"; // System.out.println(num1); System.out.println(str); } // public void method2(int num2) { int sum = num2 + 10; // System.out.println(sum); } // public VariableExample(String name, int age) { this.name = name; // this.age = age; // int num3 = 20; // String str2 = "Hello, " + this.name + "!"; // System.out.println(num3); System.out.println(str2); } } ``` ### `static` ![](https://oss.javaguide.cn/github/javaguide/java/basis/java-basis-variables-static-variable.png) `StaticVariableExample.staticVar` `private` ```java public class StaticVariableExample { // public static int staticVar = 0; } ``` `final` ```java public class ConstantVariableExample { // public static final int constantVar = 0; } ``` ### ? - **** : 0 - **** : ASCII ; - **** 2 ; `char` Java ```java public class StringExample { // public static final char LETTER_A = 'A'; // public static final String GREETING_MESSAGE = "Hello, world!"; public static void main(String[] args) { System.out.println(""+Character.BYTES); System.out.println(""+GREETING_MESSAGE.getBytes().length); } } ``` ```plain 2 13 ``` ## ### ? **** **1** ```java public void f1() { //...... } // return public void f(int a) { if (...) { // return; } System.out.println(a); } ``` **2** ```java public void f2(Parameter 1, ..., Parameter n) { //...... } ``` **3** ```java public int f3() { //...... return x; } ``` **4** ```java public int f4(int a, int b) { return a * b; } ``` ### ? JVM 1. 2. ```java public class Example { // public static final char LETTER_A = 'A'; // public static final String GREETING_MESSAGE = "Hello, world!"; public static void main(String[] args) { // System.out.println("" + LETTER_A); // System.out.println("" + GREETING_MESSAGE); } } ``` ### **1** `.` `.` **** `.` `.` ```java public class Person { public void method() { //...... } public static void staicMethod(){ //...... } public static void main(String[] args) { Person person = new Person(); // person.method(); // Person.staicMethod() } } ``` **2** ### > > > #### Java > ( `StringBuilder` ) > > ```java > StringBuilder sb = new StringBuilder(); > StringBuilder sb2 = new StringBuilder("HelloWorld"); > ``` > > ((overloading resolution)) > > Java #### 1. 2. `private/final/static` `static` 3. #### **** | | (Overloading) | (Overriding) | | -------------- | ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------- | | **** | | | | **** | ******** | **** | | **** | **** | ******** | | **** | **** | ****public > protected > default > private | | **** | | (Run-time Binding) | **** Java [issue#892](https://github.com/Snailclimb/JavaGuide/issues/892) - - - **** void ```java public class Hero { public String name() { return ""; } } public class SuperMan extends Hero{ @Override public String name() { return ""; } public Hero hero() { return new Hero(); } } public class SuperSuperMan extends SuperMan { @Override public String name() { return ""; } @Override public SuperMan hero() { return new SuperMan(); } } ``` ### Java5 Java 0 ```java public static void method1(String... args) { //...... } ``` ```java public static void method2(String arg1, String... args) { //...... } ``` **** ```java /** * JavaGuide "" Java * * @author Guide * @date 2021/12/13 16:52 **/ public class VariableLengthArgument { public static void printVariable(String... args) { for (String s : args) { System.out.println(s); } } public static void printVariable(String arg1, String arg2) { System.out.println(arg1 + arg2); } public static void main(String[] args) { printVariable("a", "b"); printVariable("a", "b", "c", "d"); } } ``` ```plain ab a b c d ``` Java `class` ```java public class VariableLengthArgument { public static void printVariable(String... args) { String[] var1 = args; int var2 = args.length; for(int var3 = 0; var3 < var2; ++var3) { String s = var1[var3]; System.out.println(s); } } // ...... } ``` ## - What is the difference between JDK and JRE? - Oracle vs OpenJDK - Differences between Oracle JDK and OpenJDK - Java
Web Proxy Viewer  |  New URL  |  Original Page