Java基础
Java基础
Java入门
Java简介
由 Sun Microsystems 公司推出。后来 Sun 公司被 Oracle (甲骨文)公司收购。Java分为三个体系:
- JavaSE(Java Standard Edition):java平台标准版,定位在个人计算机应用。
- JavaEE(Java Enterprise Edition):java平台企业版,定位在服务器端应用。
- JavaME(Java Micro Edition):java平台微型版,定位在消费性电子产品应用。(已经g了)
JavaSE包含于JavaEE中,JavaME与前二者有交集。
Java主要特性
- 跨平台/可移植:其体系结构具有中立性,另外,Java 还严格规定了各个基本数据类型的长度。Java 系统本身也具有很强的可移植性,Java 编译器是用 Java 实现的,Java 的运行环境是用 ANSI C 实现的。
- 安全性:Java通常被用在网络环境中,为此,Java 提供了一个安全机制以防恶意代码的攻击。
- 简单性:C++简化版
- 高性能:与那些解释型的高级脚本语言相比,Java 的确是高性能的。事实上,Java 的运行速度随着 JIT(Just-In-Time)编译器技术的发展越来越接近于 C++。
- 分布式:支持 Internet 应用的开发,在基本的 Java 应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库。
- 多线程:在 Java 语言中,线程是一种特殊的对象。
- 健壮性:一般不会造成计算机崩溃,有较强的异常处理。Java 的强类型机制、异常处理、垃圾的自动收集等是 Java 程序健壮性的重要保证。
Java应用程序的运行机制
Java结合了编译型和解释型,Java首先利用文本编辑器编写Java源程序,源文件的后缀名为.java;再利用编译器(javac)将源程序编译成字节码文件,字节码文件的后缀名为.class;最后利用虚以机(解释器,java)解释执行。
JVM、JRE与JDK
- JVM(Java Virtual Machine):Java虚拟机,用于执行bytecode字节码的虚拟机。
- JRE(Java Runtime Environment):Java运行环境,包含虚拟机、库函数、运行Java程序所必须的文件。
- JDK(Java Development Kit): Java 语言软件开发工具包,包含JRE,增加了编译器与调试器等。
基础语法
注释
-
单行注释:
//单行注释
-
多行注释:
/* 多行注释 */
-
文档注释:
/** 文档注释 */
注解
Annotation是从JDK5.0开始引入的新技术。 Annotation的作用:
- 不是程序本身,可以对程序作出解释。(这一点,跟注释没什么区别)
- 可以被其他程序(比如:编译器等)读取。(注解信息处理流程,是注解和注释的重大区别。如果没有注解信息处理流程,则注解毫无意义)
Annotation的格式:
- 注解是以“@注释名”在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(value="unchecked")。
Annotation在哪里使用?
- 可以附加在package,class,method,field等上面,相当于给它们添加 了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问。
常见内部注解:
- @Override:定义在java.lang.Override中,此注释只适用于修辞方法,表示一个方法声明打算重写超类中的另一个方法声明。
- @Deprecated:定义在java.lang.Deprecated中,此注释可用于修辞方法、属性、类, 表示不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。
- @SuppressWarnings:定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息。
标识符
标识符需要遵守一定的规则:
- 标识符必须以字母、下划线_、美元符号$开头。
- 标识符其它部分可以是字母、下划线“_”、美元符“$”和数字的任意组合。
- Java 标识符大小写敏感,且长度无限制。
- 标识符不可以是Java的保留字。
关键字
abstract | assert | boolean | break | byte |
case | catch | char | const | continue |
default | do | double | else | extends |
final | finally | float | for | goto |
if | implements | import | instanceof | int |
interface | long | native | new | null |
package | private | protected | public | return |
short | static | strictfp | super | switch |
synchronized | this | throw | throws | transient |
try | void | volatile | while |
Java变量
Java 中主要有如下几种类型的变量:
-
局部变量:方法或语句块内部定义的变量。生命周期是从声明位置开始到到方法或语句块执行完毕为止。局部变量在使用前必须先声明、初始化(赋初值)再使用。
-
类变量(静态变量):使用static定义。 从属于类,生命周期伴随类始终,从类加载到卸载。如果不自行初始化,与成员变量相同会自动初始化成该类型的默认初始值。
-
成员变量(非静态变量/实例变量):方法外部、类的内部定义的变量。从属于对象,生命周期伴随对象始终。如果不自行初始化,它会自动初始化成该类型的默认初始值。
数据类型 默认初值 int 0 double 0.0 char '\u0000' boolean false
Java常量
在Java语言中,主要是利用关键字final来定义一个常量。 常量一旦被初始化后不能再更改其值。
- 字面常量
- 符号常量
数据类型
基本数据类型
- 数值型
- byte:1字节,表示范围 -128 ~ 127。
- short:2字节,表示范围 -32768 ~ 32767。
- int:4字节,表示范围 -2147483648 ~ 2147483647。
- long:8字节,表示范围 ~ 。
- float:4字节,表示范围 -3.403E38~3.403E38
- double:8字节,表示范围 -1.798E308~1.798E308
- 字符型
- char:2字节,用单引号表示
- 布尔型
- boolean:1位,与C不同的是,不可以使用 0 或非 0 的整数替代 true 和 false。
引用数据类型
- class
- interface
- 数组
运算符
- 算数运算符
- 一元运算符
- 二元运算符
- 赋值运算符
- 扩展运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 字符串连接符
- 条件运算符
类型转换
-
自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型
-
强制类型转化:显式的转换一个数值的类型
(type)var
简单键入与输出
import java.util.Scanner;
public class TestScanner {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String a = scanner.nextLine();
String b = scanner.nextLine();
int c = scanner.nextInt();
}
}
控制语句
选择结构
- if单选择结构
- if - else双选择结构
- if- else if -else多选择结构
- switch结构
循环结构
- for循环
- while循环
- do - while循环
break与continue
-
用法与C一致
-
带标签的break和continue:
“标签”是指后面跟一个冒号的标识符,例如:“label:”。随同标签使用,它们就会中断到存在标签的地方。
public class Test18 { public static void main(String args[]) { outer: for (int i = 101; i < 150; i++) { for (int j = 2; j < i / 2; j++) { if (i % j == 0){ continue outer; } } System.out.print(i + " "); } } }
数组
数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。数组的三个基本特点:
- 长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
- 其元素必须是相同类型,不允许出现混合类型。
- 数组类型可以是任何数据类型,包括基本类型和引用类型。
声明数组
dataType[] arrayRefVar; // 首选的方法
//或
dataType arrayRefVar[]; // 效果相同,但不是首选方法
建议使用 dataType[] arrayRefVar 的声明风格声明数组变量。 dataType arrayRefVar[] 风格是来自 C/C++ 语言 ,在Java中采用是为了让 C/C++ 程序员能够快速理解java语言。
创建数组
arrayRefVar = new dataType[arraySize];
上面的语法语句做了两件事:
- 一、使用 dataType[arraySize] 创建了一个数组。
- 二、把新创建的数组的引用赋值给变量 arrayRefVar。
声明和创建可写在同一句:
dataType[] arrayRefVar = new dataType[arraySize];
初始化
-
静态初始化
int[] a = { 1, 2, 3 };// 静态初始化基本类型数组; Man[] mans = { new Man(1, 1), new Man(2, 2) };// 静态初始化引用类型数组;
-
动态初始化
int[] a1 = new int[2];//动态初始化数组,先分配空间; a1[0]=1;//给数组元素赋值; a1[1]=2;//给数组元素赋值;
-
默认初始化:数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。
int a2[] = new int[2]; // 默认值:0,0 boolean[] b = new boolean[2]; // 默认值:false,false String[] s = new String[2]; // 默认值:null, null
For-Each 循环
JDK 1.5 引进了一种新的循环类型,被称为 For-Each 循环或者加强型循环,它能在不使用下标的情况下遍历数组。
for(type element: array)
{
System.out.println(element);
}
数组的拷贝
System类里也包含了一个方法,将src数组里的元素值赋给dest数组的元素,其中srcpos指定从src数组的第几个元素开始赋值,length参数指定将src数组的多少个元素赋给dest数组的元素:
static void arraycopy(object src,int srcpos,object dest, int destpos,int length)
可以通过拷贝操作实现数组的删除、插入、扩容等。
Arrays类
ava.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。
- 给数组赋值:public static void fill(int[] a, int val)
- 对数组排序:public static void sort(Object[] a)
- 比较数组:public static boolean equals(long[] a, long[] a2)
- 查找数组元素:public static int binarySearch(Object[] a, Object key)
- 该方法使用二分法,需体提前排序。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了