Java基础知识(1)- Java 简介、开发环境配置和基础语法
1. Java 简介
Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称。由詹姆斯·高斯林(James Gosling)和同事们共同研发,并在1995年正式推出。
Java分为三个体系:
JavaSE(J2SE) - Java2 Platform Standard Edition,java平台标准版
JavaEE(J2EE) - Java 2 Platform,Enterprise Edition,java平台企业版
JavaME(J2ME) - Java 2 Platform Micro Edition,java平台微型版 (嵌入式开发平台,基本被 Android 代替)
2005年6月,JavaOne大会召开,SUN公司公开Java SE 6。此时,Java的各种版本已经更名以取消其中的数字"2":J2EE更名为Java EE, J2SE更名为 Java SE,J2ME更名为 Java ME。
2009年,Sun公司被 Oracle 收购.
2018年,开源组织 Eclipse 基金会宣布将 JavaEE(Enterprise Edition) 被更名为JakartaEE(雅加达)。
Java 主要特点
1) 简单性:
Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,而是引用。并提供了自动的废料收集,使得程序员不必为内存管理而担忧。
2)面向对象:
Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为 implements)。Java语言全面支持动态绑定,而C++语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。
3)分布式:
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
4)健壮性:
Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。
5)安全性:
Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。
6)体系结构中立性:
Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。
7)可移植性:
这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。
8)解释型:
如前所述,Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。
9)高性能性:
与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。
10)多线程:
在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable)的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。
11)动态性:
Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
2. Java 开发工具和环境配置
1) 开发工具
Java 语言尽量保证系统内存在2G以上,其他工具如下所示:
Linux 系统或者 WIN XP/7/8/10/11系统
Java JDK 8 以上版本
Notepad 编辑器或者其他编辑器。
IDE:Eclipse或者IntelliJ IDEA
2) Windows 10 下安装Java
(1) 下载 JDK
https://www.oracle.com/java/technologies/downloads/,安装下载的 exe文件,假设默认安装到 C:\Program Files (x86)\Java\jdk11.0.1 目录。
(2) 配置环境变量
右击“我的电脑” → “属性” → “高级系统设置” → “高级” → “环境变量”
新建系统变量(点击“系统变量”下方的“新建”按钮,填写变量名与变量值,点击“确定”)
JAVA_HOME = C:\Program Files (x86)\Java\jdk11.0.1
CLASSPATH = .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
编辑系统变量 Path (PATH)
Path = ... ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
运行cmd命令查看安装是否成功:
java -version
3) Ubuntu 18.04 下安装Java
(1) 安装 Java
$ sudo apt-get update
$ sudo apt-get install openjdk-8-jdk
$ java -version
openjdk version "1.8.0_275"
OpenJDK Runtime Environment (build 1.8.0_275-8u275-b01-0ubuntu1~18.04-b01)
OpenJDK 64-Bit Server VM (build 25.275-b01, mixed mode)
$ update-alternatives --config java
There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
注:update-alternatives --config java 命令的输出结果,显示 java 的所在目录是 /usr/lib/jvm/java-8-openjdk-amd64 。
(2) 设置 JAVA_HOME
修改系统配置文件 /etc/profile (也可修改当前用户的 ~/.bash_profile,下同)
$ sudo vi /etc/profile
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
$ source /etc/profile
$ echo $JAVA_HOME
/usr/lib/jvm/java-8-openjdk-amd64
4) CentOS 7.9 下安装 Java
(1) 安装 Java
# 查看可安装的 Java
$ yum search java | grep jdk
$ sudo yum install -y java-1.8.0-openjdk-devel.x86_64
$ java -version
openjdk version "1.8.0_332"
OpenJDK Runtime Environment (build 1.8.0_332-b09)
OpenJDK 64-Bit Server VM (build 25.332-b09, mixed mode)
$ update-alternatives --config java
Selection Command
-----------------------------------------------
1 java-1.7.0-openjdk.x86_64 (/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64/jre/bin/java)
*+ 2 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.332.b09-1.el7_9.x86_64/jre/bin/java)
注:update-alternatives --config java 命令的输出结果,显示 java 8 的所在目录是 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.332.b09-1.el7_9.x86_64 。
(2) 设置 JAVA_HOME
修改系统配置文件 /etc/profile (也可修改当前用户的 ~/.bash_profile,下同)
$ sudo vi /etc/profile
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.332.b09-1.el7_9.x86_64
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
$ source /etc/profile
$ echo $JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.332.b09-1.el7_9.x86_64
5) Java 开发工具
Eclipse IDE for Java Developers: http://www.eclipse.org/downloads/packages/
JetBrains IDEA: https://www.jetbrains.com/idea/download/
Netbeans: http://www.netbeans.org/index.html
3. Java 基础语法
1) Hello World 程序
(1) 程序代码
1 public class App { 2 /* 这是一个Java程序 3 * 它将打印Hello World 4 * 这是一个多行注释的示例 5 */ 6 public static void main(String[] args) { 7 // 这是单行注释的示例 8 /* 这个也是单行注释的示例 */ 9 System.out.println("Hello World"); 10 } 11 }
(2) 命令行方式运行
Windows 下保存为 C:\App.java, 打开 cmd 命令窗口,进入 C:\
C:> javac App.java
C:> java App # 或 java App.class
Hello World
(3) 在 Eclipse IDE for Enterprise Java Developers (2019-03) 里运行
创建 Java 项目
菜单 New -> Project -> Java Project -> Next
Project Name: HelloWorld
JRE: 1.8
Next -> Finish
生成的项目结构
HelloWorld
|- JRE System Library [JavaSE-1.8]
|- src
在 src 目录下创建 com.example 包,在包下创建 App 类(src/com/example/App.java 文件),修改代码如下:
1 package com.example; 2 3 public class App { 4 5 /* 这是一个Java程序 6 * 它将打印Hello World 7 * 这是一个多行注释的示例 8 */ 9 public static void main(String[] args) { 10 // 这是单行注释的示例 11 /* 这个也是单行注释的示例 */ 12 System.out.println("Hello World"); 13 } 14 }
菜单 Run -> Run,Eclipse 控制台显示:
Hello World
2) Java特点
(1) 大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的;
(2) 类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 App.class;
(3) 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
(4) 源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记Java是大小写敏感的),文件名的后缀为.java。(如果文件名和类名不相同则会导致编译错误)。
(5) 主方法入口:所有的Java 程序由public static void main(String[] args) 方法开始执行。
3) Java标识符
Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。
关于Java标识符,有以下几点需要注意:
(1) 所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始
(2) 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
(3) 关键字不能用作标识符
(4) 标识符是大小写敏感的
(5) 合法标识符举例:age、$salary、_value、__1_value
(6) 非法标识符举例:123abc、-salary
4) Java修饰符
Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:
访问控制修饰符 : default, public , protected, private
非访问控制修饰符 : final, abstract, static,synchronized 和 volatile
5) Java变量
Java中主要有如下几种类型的变量
局部变量
类变量(静态变量)
成员变量(非静态变量)
6) Java数组
数组是储存在堆上的对象,可以保存多个同类型变量。在后面的章节中,我们将会学到如何声明、构造以及初始化一个数组。
7) Java枚举
Java 5.0引入了枚举,枚举限制变量只能是预先设定好的值。使用枚举可以减少代码中的 bug 。
例如,我们为果汁店设计一个程序,它将限制果汁为小杯、中杯、大杯。这就意味着它不允许顾客点除了这三种尺寸外的果汁。
8) Java关键字
下面列出了Java保留字。这些保留字不能用于常量、变量、和任何标识符的名称。
关键字 描述
abstract 抽象方法,抽象类的修饰符
assert 断言条件是否满足
boolean 布尔数据类型
break 跳出循环或者label代码段
byte 8-bit 有符号数据类型
case switch语句的一个条件
catch 和try搭配捕捉异常信息
char 16-bit Unicode字符数据类型
class 定义类
const 未使用
continue 不执行循环体剩余部分
default switch语句中的默认分支
do 循环语句,循环体至少会执行一次
double 64-bit双精度浮点数
else if条件不成立时执行的分支
enum 枚举类型
extends 表示一个类是另一个类的子类
final 表示一个值在初始化之后就不能再改变了
表示方法不能被重写,或者一个类不能有子类
finally 为了完成执行的代码而设计的,主要是为了程序的健壮性和完整性,无论有没有异常发生都执行代码。
float 32-bit单精度浮点数
for for循环语句
goto 未使用
if 条件语句
implements 表示一个类实现了接口
import 导入类
instanceof 测试一个对象是否是某个类的实例
int 32位整型数
interface 接口,一种抽象的类型,仅有方法和常量的定义
long 64位整型数
native 表示方法用非java代码实现
new 分配新的类实例
package 一系列相关类组成一个包
private 表示私有字段,或者方法等,只能从类内部访问
protected 表示字段只能通过类或者其子类访问
子类或者在同一个包内的其他类
public 表示共有属性或者方法
return 方法返回值
short 16位数字
static 表示在类级别定义,所有实例共享的
strictfp 浮点数比较使用严格的规则
super 表示基类
switch 选择语句
synchronized 表示同一时间只能由一个线程访问的代码块
this 表示调用当前实例
或者调用另一个构造函数
throw 抛出异常
throws 定义方法可能抛出的异常
transient 修饰不要序列化的字段
try 表示代码块要做异常处理或者和finally配合表示是否抛出异常都执行finally中的代码
void 标记方法不返回任何值
volatile 标记字段可能会被多个线程同时访问,而不做同步
while while循环
9)Java注释
类似于C/C++,Java也支持单行以及多行注释。注释中的字符将被Java编译器忽略。示例见 1)Hello World 程序
10)Java 空行
空白行,或者只有注释的行,Java编译器都会忽略掉。
11)继承
在Java中,一个类可以由其他类派生。如果你要创建一个类,而且已经存在一个类具有你所需要的属性或方法,那么你可以将新创建的类继承该类。
利用继承的方法,可以重用已存在类的方法和属性,而不用重写这些代码。被继承的类称为超类(super class),派生类称为子类(subclass)。
12)接口
在Java中,接口可理解为对象间相互通信的协议。接口在继承中扮演着很重要的角色。 接口只定义派生要用到的方法,但是方法的具体实现完全取决于派生类。
本系列文章资料参考来源:
1. http://c.biancheng.net/java/
2. https://www.w3cschool.cn/java/
3. https://www.runoob.com/java/java-tutorial.html
4. https://docs.oracle.com/en/java/
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)