java-模块一
硬件和软件
硬件(Hardware)
-
硬件指的是计算机系统中的物理装置,包括计算机本身及其所有可触及的部件 -
软件是指计算机上运行的各种程序和相关的数据,它们使硬件能够完成各种任务。软件可以分为两大类:
计算机编程语言
编写计算机程序的形式化语言,它允许程序员定义计算机应执行的操作
-
低级语言:更接近于机器语言,通常直接操作硬件或内存。
-
机器语言(Machine Language):由二进制代码组成,是计算机可以直接执行的语言。 -
汇编语言(Assembly Language):一种低级编程语言,与机器语言非常接近,但使用助记符代替数字编码。 -
高级语言:更加抽象,易于人类理解,需要通过编译器或解释器转换为机器语言。
Java语言
Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems公司在1995年推出,并在2009年被甲骨文公司(Oracle)收购后继续发展。Java的设计目标是具有高度的可移植性、安全性和可靠性,其口号“一次编写,到处运行”体现了这一点,意味着用Java编写的程序可以在支持Java的所有平台上运行,无需重新编译。
Java的主要特性
-
简单性:Java设计成易于使用,以让更多的开发者能够快速上手。 -
面向对象:Java是一个面向对象的语言,几乎所有代码都写在类里面。它支持封装、继承和多态等面向对象的基本概念。 -
分布式:Java内置了对网络编程的支持,使其成为构建分布式应用的理想选择。 -
健壮性:通过强类型检查机制和运行时异常处理机制,Java帮助开发者避免潜在错误。 -
安全性:Java提供了多种安全措施,如字节码验证、沙箱机制等,保护用户免受恶意代码的危害。 -
体系结构中立:Java编译器生成的是字节码,这是一种与具体硬件平台无关的中间表示形式。JVM(Java虚拟机)负责将这些字节码翻译成本地机器指令执行。 -
可移植性:由于其体系结构中立的特性,Java程序可以轻松地从一个系统移植到另一个系统。 -
解释型:Java源代码首先被编译成字节码,然后由JVM解释执行,这使得Java具备了解释型语言的优点。 -
高性能:尽管Java是解释型语言,但现代JVM包含了即时编译技术(JIT),可以将频繁执行的字节码转换为本地机器码,从而提高性能。 -
多线程:Java内置了对多线程编程的支持,允许同时执行多个任务。
应用领域
Java因其强大的功能和灵活性而被广泛应用于各种领域,包括但不限于:
-
企业级应用开发:利用Java EE(Enterprise Edition)开发大型、分布式、基于网络的应用程序。 -
Android应用开发:尽管Kotlin逐渐流行,Java依然是Android开发的重要语言之一。 -
Web应用开发:通过Spring、Hibernate等框架,Java在动态网站和服务器端应用开发中扮演重要角色。 -
嵌入式系统:Java ME(Micro Edition)用于小型设备上的应用
Java SE (Java Standard Edition)
-
定义:Java SE是Java平台的基础版本,提供了开发和部署桌面、服务器、嵌入式环境和高端计算设备应用的核心功能。 -
用途:它适用于开发独立的应用程序或小应用程序(Applets)。Java SE包含了Java语言基础库、虚拟机(JVM)和开发工具(如编译器和调试器)。 -
最新发展:随着Java的不断更新,Java SE也持续演进,引入了新的API、改进性能以及增强的安全性等特性。
Java EE (Java Enterprise Edition)
-
定义:Java EE以前称为J2EE,是一个基于Java SE构建的企业级软件开发平台,旨在简化大型分布式系统、多层架构的企业级应用的开发、部署和管理。 -
用途:它支持Web服务、事务处理、消息传递、分布式数据库访问等功能,非常适合开发需要高安全性、可扩展性和可靠性的企业解决方案。 -
关键组件: -
Servlets和JSP用于动态网页生成。 -
EJB(Enterprise JavaBeans)用于服务器端业务逻辑组件。 -
JPA(Java Persistence API)用于对象关系映射。 -
JMS(Java Message Service)用于异步通信。 -
JTA(Java Transaction API)用于分布式事务管理等。
Java ME (Java Micro Edition)
-
定义:Java ME是为嵌入式和移动设备设计的轻量级Java平台,允许开发者创建跨多种设备运行的应用程序,包括手机、PDA、电视顶盒、打印机、手持终端等小型设备。 -
用途:尽管在Android和iOS主导的智能手机市场中,Java ME的重要性有所下降,但它仍然在一些特定领域内被使用,比如某些类型的物联网(IoT)设备。 -
特点:提供了一个灵活的、可伸缩的环境,使得开发者可以编写一次代码,在多个不同类型的设备上运行。
软件开发
软件开发是指通过使用编程语言、框架、工具和技术来创建、设计、部署和支持软件的过程。它涵盖了从概念形成到最终产品的整个生命周期,包括需求分析、设计、编码、测试、部署和维护等多个阶段。
字节
-
计算机中存储数据最小计量单位,用byte或者B表示 -
计算机最小的存储单元是二进制,因为计算机上能看到的任何东西都是CPU通过二进制转换而来的,二进制用bit表示 -
1 byte=8 bit -
取值范围:-128-127
存储数据的计量单位换算
-
8 bit=1 B -
1024B=1KB -
1024KB=1MB -
1024MB=1GB -
1024GB=1TB
常用DOS命令
-
打开dos窗口 win+R
输入cmd -
切换磁 D: -
查看目录 dir -
创建目录 md+文件名 -
进入文件目录 cd+文件名 -
回到上一层目录 cd.. -
进入文件 cd+文件名/文件夹名 -
直接回到根目录 cd -
删除目录 rd+文件名(注意只能删除本路径下的)(里面如果有类容不能删),这个命令不走回收站 -
文件要删除用 del,也不走回收站 -
批量删除 del *.后缀名
-
清屏cls -
推出黑窗口exit -
创建文件夹 mkdir -
创建多级文件夹 mkdir 文件夹文件夹 -
正斜杠/ -
反斜杠
快速打开该目录对应的dos命令窗口: 选中路径 输入cmd回车
在dos命令窗口中,可以输入文件夹名或者文件名的一部分按Tab键,它会自动补全文件夹名或者文件名
可以通过以下几种方法创建文本文件
-
echo
命令可以将内容输出到文件中,从而创建文本文件。例如:
echo Hello, World! > filename.txt
如果你想追加内容而不是覆盖,可以使用 >>
:
echo More content >> filename.txt
-
type
命令可以将空内容写入文件,从而创建一个空的文本文件:
type nul > filename.txt
-
copy
命令也可以用来创建空文件:
copy nul filename.txt
-
虽然 notepad
是一个图形界面程序,但也可以通过命令提示符启动:
notepad filename.txt
-
fsutil
是一个文件系统工具,可以用来创建文件:
fsutil file createnew filename.txt 0
JVM和跨平台介绍
1.1 什么是JVM?
JVM(Java Virtual Machine,Java虚拟机)是运行Java程序的虚拟机环境。它是一个抽象的计算机,能够将Java字节码(.class文件)转换为机器码,从而在不同的操作系统和硬件平台上运行Java程序。JVM是Java平台的核心组件之一,它提供了运行时环境、内存管理、垃圾回收等功能。
1.2JVM的作用
-
跨平台性:JVM屏蔽了不同操作系统的差异,使得Java程序可以在任何支持JVM的平台上运行。
-
内存管理:通过垃圾回收机制自动管理内存,减少内存泄漏的风险。
-
安全性:提供沙箱环境,限制程序对本地系统的访问,提高安全性。
-
性能优化:通过JIT编译器将热点代码编译为本地机器码,提高运行效率。
1.3 什么是跨平台?
跨平台是指软件能够在不同的操作系统和硬件平台上运行,而无需进行大量的修改。Java语言的核心特性之一就是“一次编写,到处运行”(Write Once, Run Anywhere,WORA),这主要得益于JVM的存在。
JDK和JRE
1. JDK(Java Development Kit)
1.1 定义
JDK(Java Development Kit,Java开发工具包)是用于开发Java应用程序和Applet的工具集。它包含了JRE(Java运行时环境)以及编译器、调试器、工具等,用于编写、编译和运行Java程序。
1.2 组成部分
JDK主要包含以下内容:
-
Java编译器(javac)
-
将Java源代码(.java文件)编译为字节码(.class文件)。
-
命令格式:
javac HelloWorld.java
。 -
Java运行时环境(JRE)
-
JDK中包含了一个完整的JRE,用于运行Java程序。
-
包括JVM(Java虚拟机)、类库(如
java.lang
、java.util
等)。 -
Java工具
-
**
java
**:启动Java程序。 -
**
javac
**:编译Java源代码。 -
**
javap
**:Java反汇编器,用于查看字节码。 -
**
jar
**:用于创建和管理Java归档文件(.jar)。 -
**
javadoc
**:用于生成Java文档。 -
**
jdb
**:Java调试器,用于调试Java程序。 -
**
jconsole
**:用于监控和管理JVM。 -
**
jps
**:列出当前系统中运行的Java进程。 -
**
jstat
**:用于监控JVM的性能指标。 -
类库和API
-
JDK提供了完整的Java类库和API文档,用于开发Java程序。
1.3 用途
-
JDK主要用于开发Java应用程序,包括桌面应用、服务器端应用、Web应用等。
-
开发者使用JDK中的工具(如
javac
)将Java源代码编译为字节码,然后通过JRE运行这些字节码。
2. JRE(Java Runtime Environment)
2.1 定义
JRE(Java Runtime Environment,Java运行时环境)是运行Java程序所需的环境。它包括JVM(Java虚拟机)、类库(如java.lang
、java.util
等)以及运行Java程序所需的其他组件。
2.2 组成部分
JRE主要包含以下内容:
-
Java虚拟机(JVM)
-
JVM是运行Java程序的核心组件,负责将字节码转换为机器码并执行。 -
类库(Java API)
-
JRE提供了运行Java程序所需的标准类库,如 java.lang
、java.util
、java.io
等。 -
运行时工具
-
**
java
**:用于启动Java程序。 -
**
keytool
**:用于管理密钥和证书。 -
**
policytool
**:用于编辑安全策略文件。
2.3 用途
-
JRE主要用于运行Java程序,而不是开发Java程序。
-
如果用户只需要运行Java应用程序(如Java Web应用、Java桌面应用等),则只需要安装JRE即可。
-
JRE通常比JDK小,因为它不包含开发工具。
3. JDK与JRE的关系
-
包含关系
-
JDK包含了JRE。安装JDK后,用户可以同时使用JRE的功能来运行Java程序。
-
如果只需要运行Java程序,安装JRE即可;如果需要开发Java程序,则需要安装JDK。
-
用途区别
-
JDK:用于开发Java程序,包括编写、编译和调试Java代码。
-
JRE:用于运行Java程序,不包含开发工具。
-
版本对应
-
JDK和JRE的版本通常是对应的。例如,JDK 1.8会包含JRE 1.8。
-
开发者需要确保JDK和JRE的版本一致,以避免兼容性问题。
从jdk9开始jdk目录中就没有单独的jre目录了,因为jre作为一个运行环境,里面不需要包含太多东西浪费空间,降低运行效率,在jdk9后采取模块化的技术,让开发者能按照自己的应用创建一个最小运行环境
配置环境变量
为了在任意路径下都可以使用java和javac命令
Java之父
詹姆斯高斯林
开发三步骤
-
编写(后缀为java) -
编译(javac,生成一个.class文件) -
运行(java class文件,不需要后缀名了)
文档注释和注释的区别
文档注释(Documentation Comments)和普通注释(Comments)都是代码中用于添加非执行性文本的方式,但它们的目的和使用场景有所不同。
文档注释
文档注释类容可以通过javadoc命令生成一个文档(API文档),能快速对此类以及此类中实现的功能进行快速的了解
-
目的:主要用于生成软件文档。它们描述了代码的规格说明,如类的功能、方法的作用、参数的意义及返回值等信息。 -
格式:不同编程语言有不同的格式要求。例如,在Java中,通常以 /**
开头,并以*/
结束,其中可以包含特定的标签如@param
、@return
等来详细描述方法或类。 -
工具支持:有许多工具可以读取这些注释并自动生成HTML、PDF等格式的文档。比如,Java中有Javadoc工具,Python有Sphinx等。 -
位置:一般放置在类、接口、方法、字段等定义之前。
普通注释
-
目的:主要是为了给开发者提供代码内部逻辑或者意图的解释,帮助理解代码工作原理,不会被编译器或解释器处理。 -
格式:同样根据编程语言的不同而变化。例如,在C++或Java中,单行注释以 //
开始,多行注释以/*
开始并以*/
结束;在Python中,单行注释以#
开始。 -
工具支持:普通注释不被专门用于生成外部文档的工具所解析,主要是为了代码维护和阅读方便。 -
位置:可以在代码的任何地方添加,用于解释前后相关的代码段。
简而言之,文档注释更侧重于对外部使用者展示代码库的功能与使用方法,而普通注释则侧重于对开发团队内部成员提供代码理解和维护的帮助。
Helloworld
/*
public class test定义一个类
class:代表就是类,类是java程序最基本的组成单元,所有代码都需要在类中写
test:类名,必须和java名保持一致
*/
publicclasstest{
/*
public static void main(String[] args):main方法,是程序的入口
jvm执行代码,必须从main方法开始
*/
publicstaticvoidmain(String[] args){
//打印语句
System.out.println("Hello word")
}
}
关键字
-
abstract:表明一个类或方法是抽象的,意味着它需要被继承或实现。 -
assert:用于测试条件是否为真,主要用于调试。 -
boolean:表示布尔类型的数据,其值只能为true或false。 -
break:用于立即退出循环或switch语句。 -
byte:一种基本数据类型,表示8位有符号整数。 -
case:switch语句中的一个可能分支。 -
catch:用于捕获try块中抛出的异常。 -
char:表示16位Unicode字符的基本数据类型。 -
class:定义类的关键字。 -
const:保留关键字但未使用,通常使用 final
来代替常量的定义。 -
continue:跳过当前循环体中剩余的语句,直接进入下一次循环。 -
default:switch语句中的默认分支,也可用于接口中的默认方法。 -
do:与 while
一起使用形成do-while循环。 -
double:表示双精度浮点数的基本数据类型。 -
else:if语句中的另一个选择路径。 -
enum:定义枚举类型。 -
extends:用于指示一个类是从另一个类派生,或者一个接口继承自另一个接口。 -
final:使类、方法或变量不可更改。 -
finally:用于声明在try-catch结构中无论如何都会执行的一段代码。 -
float:表示单精度浮点数的基本数据类型。 -
for:一种循环结构,允许代码重复执行。 -
goto:保留关键字但未使用。 -
if:条件判断语句。 -
implements:表示一个类实现了某个接口。 -
import:引入其他包中的类和接口。 -
instanceof:检查对象是否是指定类型的实例。 -
int:表示32位有符号整数的基本数据类型。 -
interface:定义接口。 -
long:表示64位有符号整数的基本数据类型。 -
native:表示该方法是用平台相关的语言(如C或C++)实现的。 -
new:创建新对象实例。 -
null:表示空引用。 -
package:声明源文件所在的包。 -
private:访问控制符,限制成员只能在自己的类中访问。 -
protected:访问控制符,允许子类和同一个包中的所有类访问成员。 -
public:访问控制符,允许任何地方访问成员。 -
return:从方法中返回结果并退出方法。 -
short:表示16位有符号整数的基本数据类型。 -
static:表示属于类而不是类的实例的成员。 -
strictfp:严格浮点计算,确保浮点运算在不同平台上的一致性。 -
super:指代父类的对象,用于调用父类的方法或构造函数。 -
switch:多路分支语句,根据表达式的值选择执行多个语句块之一。 -
synchronized:用于指定只有一个线程可以访问的代码块或方法。 -
this:指代当前对象实例。 -
throw:手动抛出一个异常。 -
throws:声明一个方法可能抛出的异常。 -
transient:标记不需要序列化的字段。 -
try:尝试执行一段可能抛出异常的代码。 -
void:表示方法没有返回值。 -
volatile:保证变量对所有线程可见性,防止指令重排序优化。 -
while:当条件为真时重复执行一段代码。
字符编码
-
编码:保存数据的过程 -
解码:读取数据的过程 -
编码和解码的规范必须要一样 -
常见的两个编码规范 -
GBK:专门为中文设置,ANSI代表JDK,一个中文汉字在这占两个字节 -
UTF-8:一个汉字在这里占3个字节 -
dos默认编码集是jdk
源文件名(java文件名)与类名一致问题
类名其实不一定要和文件名相同,如果想要不同就把class前面的public去掉 一个Java文件中可以写多个类,但是public类、只能有一个 main方法必须写在public类中
小技巧
1、光标放在你想复制到行上,ctrl+d就实现复制当前行了 2、一次操作多行:预留出足够的空间,按住alt不放,鼠标往下拉
原文始发于微信公众号(安全泡泡鱼):java-模块一
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论