寒假学Java-基础语法篇1

第一个Java程序

package com.LE0.test; //当前的类定义在哪个包下
  
public class HelloWorld {  //定义了一个公共类,类名必须和文件名完全一致
    static void main() {   //程序入口点
        System.out.println("hello world!");  //向标准输出流打印文本并换行
    }  
}

Java基础语法

基本类型

package com.LE0.test;

public class BasicTypes {
    static void main() {
        //整数类型
        byte bytevar = 127;    // 8位,范围:-128 到 127
        short shortvar = 32767; // 16位,范围:-2^15 到 2^15-1
        int intvar =32767;     // 32位,范围:-2^31 到 2^31-1
        long longvar = 9223372036854775807L; // 64位,范围:-2^63 到 2^63-1 要加后缀 L
        int x1 = 12_34_567; // Java 7 及以上版本支持数字字面量中的下划线
        //浮点类型
        float floatvar =5.5f;   // 32位,单精度,后缀 f
        double doublevar =5.55; // 64位,双精度,后缀没f默认为 double

        //字符类型
        char charvar ='A';

        //布尔类型
        boolean flag = true;

        //字符串类型
        String str = "Hello, Java!";//Java SE 7 及更高版本中,可以使用 String 对象。

        // 输出变量值
        System.out.println("Byte: " + bytevar);
        System.out.println("Short: " + shortvar);
        System.out.println("Integer: " + intvar);
        System.out.println("Long: " + longvar);
        System.out.println("x1: " + x1);
        System.out.println("Float: " + floatvar);
        System.out.println("Double: " + doublevar);
        System.out.println("Character: " + charvar);
        System.out.println("Boolean: " + flag);
        System.out.println("String: " + str);
    }
}

output:
Byte: 127
Short: 32767
Integer: 32767
Long: 9223372036854775807
x1: 1234567
Float: 5.5
Double: 5.55
Character: A
Boolean: true
String: Hello, Java!

初始化默认值

Data Type  数据类型 Default Value (for fields)
默认值(字段)
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char \u0000
String (or any object)
String(或任何对象)
null
boolean  布尔型 false

命名规则

一个变量的名称可以是任何合法的标识符——一个不限长度的 Unicode 字母和数字序列,以字母、美元符号 $ 或下划线字符 _ 开头。然而,约定是始终以字母开头,而不是 $ 或 _

键盘输入

package com.LE0.test;  
  
import java.util.Scanner;  
  
public class Input {  
    static void main() {  
        Scanner sc = new Scanner(System.in);  
        System.out.print("Enter an integer: ");  
        int intInput = sc.nextInt();  
        System.out.print("Enter a double: ");  
        double doubleInput = sc.nextDouble();  
        System.out.print("Enter a string: ");  
        String stringInput = sc.next();  
        System.out.println("You entered integer: " + intInput);  
        System.out.println("You entered double: " + doubleInput);  
        System.out.println("You entered string: " + stringInput);  
        sc.close();  
    }  
}

数组

package com.LE0.test;  
  
public class Array {  
    static void main() {  
        int[] intarray = {1,2,3,4,5};  //也可以像c那样将[]写到后面  int intarray[]={}
        String[] strarray = {"Hello","Java","Array"};  
        System.out.println("Integer Array:");  
        for (int i = 0; i < intarray.length; i++) {  
            System.out.println("Element " + i + ": " + intarray[i]);  
        }  
        System.out.println("String Array:");  
        for (int i = 0; i < strarray.length; i++) {  
            System.out.println("Element " + i + ": " + strarray[i]);  
        }  
        int[] copyArray = new int[5];
        System.arraycopy(intarray,0, copyArray, 0, 5);//复制数组
        System.out.println("Copied Array:");
        for(int i = 0; i < copyArray.length; i++){
            System.out.println("Element " + i + ": " + copyArray[i]);
    }  
}

byte[] anArrayOfBytes;
short[] anArrayOfShorts;
long[] anArrayOfLongs;
float[] anArrayOfFloats;
double[] anArrayOfDoubles;
boolean[] anArrayOfBooleans;
char[] anArrayOfChars;
String[] anArrayOfStrings;

var类型标识符

从Java SE 10开始,可以使用var类型标识符声明局部变量,这样就可以让编译器来觉得我创建的变量的实际类型。

var list = List.of("one", "two", "three", "four");  //这是局部变量,在类的方法里
for (var element: list) {  
    IO.println(element);  
}

运算符

Operators  运算符 Precedence  优先级
postfix  后缀 expr++ expr--
unary  一元 ++expr --expr +expr -expr ~ !
multiplicative  乘法 * / %
additive  加法 + -
shift  移位 << >> >>>
relational  关系 < > <= >= instanceof
equality  相等 == !=
bitwise AND  按位与 &
bitwise exclusive OR  按位异或 ^
bitwise inclusive OR  按位或 |
logical AND  逻辑与 &&
logical OR  逻辑或 |
ternary  三元 ? :
assignment  赋值 = += -= *= /= %= &= ^= |= <<= >>= >>>=
除了赋值运算符之外的所有二元运算符都是从左到右被评估的;赋值运算符是从右到左被评估的。

感觉和C++都差不多,其他的就不罗列了

Java的运行机制

Java是一种跨平台的编程语言,其运行机制依赖于JVM(Java虚拟机)、JRE(Java运行时环境)和JDK(Java开发工具包)。Java程序的运行过程包括编译和解释两个阶段,通过生成字节码(.class文件)实现跨平台特性。

运行流程

  1. 编写源代码:开发者使用文本编辑器或IDE(如Eclipse、IntelliJ IDEA)编写Java源代码文件(.java文件)。
  2. 编译源代码:通过JDK中的javac编译器将源代码编译为字节码文件(.class文件)。
  3. 运行字节码:JVM加载字节码文件并将其解释为底层操作系统的机器码,实现程序的运行。

核心概念:JVM、JRE和JDK

JVM(Java虚拟机)

JVM是Java程序运行的核心,负责解释和执行字节码文件。JVM屏蔽了底层操作系统的差异,使得Java程序可以实现“一次编译,到处运行”的特性。

JRE(Java运行时环境)

JRE是Java程序运行所需的环境,包含JVM、核心类库和其他支持文件。如果只需要运行Java程序,安装JRE即可。

JDK(Java开发工具包)

JDK是Java开发的完整工具包,包含JRE、编译器(javac)、调试器(jdb)和其他开发工具。开发者需要安装JDK才能编写和编译Java程序。

JVM的跨平台原理

JVM通过为不同操作系统提供特定的实现,屏蔽了底层平台的差异。开发者只需编写一次代码,生成的字节码文件可以在任何安装了JVM的平台上运行。

总结一下

一次编译随处运行

  1. 编写代码,生成原.java文件
  2. 编译生成字节码.class文件
javac 文件名.java
  1. 在同一个目录下,继续执行运行命令
java 类名      //注意这里不需要加后缀.class

Java内存分配

基础概念

堆内存(Heap Memory)

Java 堆是 Java 虚拟机所管理的内存中最大的一块,它是所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。例如,当我们使用 new 关键字创建一个对象时,对象就会被分配到堆内存中。(当出现关键字new的时候说明调用了堆内存)

int[] arr = {1,2,3,4,5}//等价于下面的写法,因此也调用了堆内存
int[] arr = new int[]{1,2,3,4,5}

栈内存(Stack Memory)

每个线程都有一个私有的栈,栈中主要存放局部变量、方法调用信息等。当方法被调用时,会在栈中创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。方法执行结束后,栈帧会被弹出,释放内存。

方法区(Method Area)

方法区也是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

本地方法栈(Native Method Stack)

本地方法栈与虚拟机栈所发挥的作用是非常相似的,其区别不过是虚拟机栈为虚拟机执行 Java 方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的 Native 方法服务。

posted @ 2026-01-12 21:39  leee0  阅读(2)  评论(0)    收藏  举报