寒假学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文件)实现跨平台特性。
运行流程
- 编写源代码:开发者使用文本编辑器或IDE(如Eclipse、IntelliJ IDEA)编写Java源代码文件(.java文件)。
- 编译源代码:通过JDK中的
javac编译器将源代码编译为字节码文件(.class文件)。 - 运行字节码: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的平台上运行。
总结一下
一次编译随处运行
- 编写代码,生成原
.java文件 - 编译生成字节码
.class文件
javac 文件名.java
- 在同一个目录下,继续执行运行命令
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 方法服务。

浙公网安备 33010602011771号