Java基础知识
文章目录
一、初识java
1.1.简介
1.1.1.概念、历史、特点
-
一门面对对象的高级程序设计语言
-
历史
- 原名OAK,1991年,由Sun公司推出,詹姆斯.戈士林亲手设计,他完成了Java的编译器和虚拟机
- 1994年将目标转向为internet,1995年,正式改名Java
- 于2009年被Oracle贵司收购
-
特点
- 通过解释方式执行语言,语法规则类似C++
- 跨平台,一次编写,到处运行
- 语言简洁得多,可靠性、安全性更高
1.1.2.工作流程
-
为什么跨平台?
- 程序不直接作用于操作系统,,而是作用于操作系统上的JVM(java虚拟机),只需要操作系统上有相应的虚拟机就可以执行java程序
-
机器码
- 目前绝大多数的设备使用的都是机器码(二进制编码)
- 极少部分设备使用光子机器码
-
字节码
- 一种针对JVM而开发的编码
- 目前也有极少数的设备可以直接使用字节码,而不需要借助JVM将字节码解释成二进制编码后运行
-
JVM(java虚拟机)
- 一种运行java字节码的虚拟计算机,附着在具体地1操作系统上,比如win系统、Linux系统、Mac系统、安卓系统等
- 作用:将字节码解释成二进制编码,是java程序一次编写到处运行的关键
- 过程
- 加载代码
- 校验代码
- 执行代码并生成二进制编码
-
工作流程图示
1.1.3.应用
- 桌面应用系统开发
- 嵌入式系统开发
- 电子商商务应用
- 企业级应用开发
- 交互式系统开发
- 分布式系统开发
- 多媒体系统开发
- web应用系统开发
- 动画游戏设计、图形图像
- 消费类设备:为手机、电脑等提供应用程序
- 安卓系统的软件开发主要用到的就是java
1.1.4.开发工具
- eclipse软件:大型企业基本上用这个,集成度高,高智能
- idea软件:大多数工作人员用的软件,集成度高,高智能,分社区版和旗舰版(收费,较社区版功能更全)
- sublime软件:
- 集成度较低,推荐初学者使用,便于初学者对代码的记忆理解更为深刻
- 面试时候,一张纸,一支笔,需要自己写,若平时学习阶段过于依赖集成度高的开发工具,面试时容易在细节上受阻
- netbeans软件:一般用于等级考试
- JBuilder软件
1.1.5.eclipse版本
-
Java SE
- Java的标准版本,主要用于桌面应用程序的开发,Java的基础
- 语言基础、数据库连接性操作、输入输出、网络通信、多线程等技术
- 学习,等级考试,应用等
-
Java EE
- Java的企业版,主要用于企业级分布式的网络程序,包含Java SE全部功能
- 如电子商务网站和ERP(企业资源规划)系统,其核心为企业Java组件模型EJB
-
Java ME
- 主要用于嵌入式系统开发
- 如掌上电脑、手机等移动通信设备,现在大部分手机都支持Java
1.1.6.API文档(java编程字典)
Application Programming Interface,应用程序编程接口,Java编程的字典,类的继承结构、成员变量、构造方法、静态成员的描述信息和详细说明等内容
-downlload
-接受协议
-jdk-8u65-docs-all zip
1.1.7.java语言特点
-
简单
- 语法规则与C++类似
- 在C++基础上进行简化和提高
- 如Java采用接口代替多重继承,并取消指针,因为指针和多重继承使程序变得复杂
- Java通过通过垃圾自动收集,简化程序员资源释放管理工作
- 资源多:Java提供了丰富的类库和API文档以及第三方开发包,另外还有大量的基于Java的开源项目,现在JDK(Java开发者工具箱)也开放源代码了,读者可以通过分析项目的源代码,从而提高自己的编程水平
-
面向对象
- Java的语言基础,万物皆对象,语法中不能在类外面单独定义数据和函数
- Java语言最外部的数据类型是对象,所有元素均通过类和对象来访问
-
分布性
- 操作分布:在多个不同的主机上布置相关的操作
- 数据分布:将数据分别存放在多个不同的主机上
- URL(统一资源定位符):Java通过URL对象访问对象,访问方式与访问本地系统相同
-
可移植性
- Java具有与体系结构无关特性,故可以移植到网络上不同的计算机
- Java类库可针对不同平台接口,故类库也可以移植
-
解释型
- 字节码:字节码独立于平台,携带了许多编译信息,使得连接过程更加简单,开发过程迅速
- Java虚拟机:运行Java需要解释器,任何移植了Java虚拟机(解释器)的设备均可以用Java字节码进行解释运行
-
安全性
- 没有C语言的指针和内存释放等语法,避免了用户对内存的非法操作
- Java程序代码经代码校验、指针校验等很多测试后才能运行
- 未经允许的Java程序不可能出现损害系统平台的行为
- 使用Java可以编写出防病毒和防修改的系统
-
健壮性
- 检查程序在编译时的错误并消除错误
- 类型检查便于用户检查出许多开发早期时出现的错误
- 集成开发工具使编译和运行Java程序更加容易(eclipse/netbeans)
-
多线程
- 应用程序在同一时间内可以并行执行多项任务
- 相应的同步机制可以不同线程准确地共享数据
- 带来更好的交互能力和实时行为
-
高性能
- 编译后的字节码在解释器中运行,速度比大多数交互式应用程序快很多
- 字节码在程序运行(JVM)时被翻译成特定平台的机器指令,进一步提高运行速度
-
动态
- 动态调整库中方法和变量的增加,而客户端无需作任何更改
-
垃圾回收机制
- 对内存的释放和回收是自动进行,有效解决内存泄漏和无效内存的使用
- 减轻程序员负担,提高工作效率
1.1.8.JDK安装与配置和环境变量
背景:Java的JDK又称Java SE(以前称J2SE),是Sun公司的产本,由于Sun公司已经被Oracle收购,因此JDK可以在Oracle公司的官方网站
请点击下一行
-
建议安装在默认的C盘地址中,该路径下最稳定
-
配置环境变量
(配置环境变量的通用操作)
- 找到该路径,并点击此处,将路径复制
- 复制路径
- C:\Program Files\Java\jdk-16\bin
- 此电脑-属性-环境变量-系统变量-双击path-新建-粘贴(JDK的bin路径)
-
检验环境变量是否成功
-
在doc界面,输入
- javac
- java
- java -version
-
Microsoft Windows [版本 10.0.17763.1577] (c) 2018 Microsoft Corporation。保留所有权利。 C:\Users\Administrator>javac 用法: javac <options> <source files> 其中, 可能的选项包括: @<filename> 从文件读取选项和文件名 -Akey[=value] 传递给注释处理程序的选项 --add-modules <模块>(,<模块>)* 除了初始模块之外要解析的根模块; 如果 <module> 为 ALL-MODULE-PATH, 则为模块路径中的所有模块。 --boot-class-path <path>, -bootclasspath <path> 覆盖引导类文件的位置 --class-path <path>, -classpath <path>, -cp <path> 指定查找用户类文件和注释处理程序的位置 -d <directory> 指定放置生成的类文件的位置 -deprecation 输出使用已过时的 API 的源位置 --enable-preview 启用预览语言功能。要与 -source 或 --release 一起使用。 -encoding <encoding> 指定源文件使用的字符编码 -endorseddirs <dirs> 覆盖签名的标准路径的位置 -extdirs <dirs> 覆盖所安装扩展的位置 -g 生成所有调试信息 -g:{lines,vars,source} 只生成某些调试信息 -g:none 不生成任何调试信息 -h <directory> 指定放置生成的本机标头文件的位置 --help, -help, -? 输出此帮助消息 --help-extra, -X 输出额外选项的帮助 -implicit:{none,class} 指定是否为隐式引用文件生成类文件 -J<flag> 直接将 <标记> 传递给运行时系统 --limit-modules <模块>(,<模块>)* 限制可观察模块的领域 --module <模块>(,<模块>)*, -m <模块>(,<模块>)* 只编译指定的模块,请检查时间戳 --module-path <path>, -p <path> 指定查找应用程序模块的位置 --module-source-path <module-source-path> 指定查找多个模块的输入源文件的位置 --module-version <版本> 指定正在编译的模块版本 -nowarn 不生成任何警告 -parameters 生成元数据以用于方法参数的反射 -proc:{none,only} 控制是否执行注释处理和/或编译。 -processor <class1>[,<class2>,<class3>...] 要运行的注释处理程序的名称; 绕过默认的搜索进程 --processor-module-path <path> 指定查找注释处理程序的模块路径 --processor-path <path>, -processorpath <path> 指定查找注释处理程序的位置 -profile <profile> 请确保使用的 API 在指定的配置文件中可用 --release <release> 为指定的 Java SE 发行版编译。支持的发行版:7, 8, 9, 10, 11, 12, 13, 14, 15, 16 -s <directory> 指定放置生成的源文件的位置 --source <release>, -source <release> 提供与指定的 Java SE 发行版的源兼容性。支持的发行版:7, 8, 9, 10, 11, 12, 13, 14, 15, 16 --source-path <path>, -sourcepath <path> 指定查找输入源文件的位置 --system <jdk>|none 覆盖系统模块位置 --target <release>, -target <release> 生成适合指定的 Java SE 发行版的类文件。支持的发行版:7, 8, 9, 10, 11, 12, 13, 14, 15, 16 --upgrade-module-path <path> 覆盖可升级模块位置 -verbose 输出有关编译器正在执行的操作的消息 --version, -version 版本信息 -Werror 出现警告时终止编译 C:\Users\Administrator>java 用法:java [options] <主类> [args...] (执行类) 或 java [options] -jar <jar 文件> [args...] (执行 jar 文件) 或 java [options] -m <模块>[/<主类>] [args...] java [options] --module <模块>[/<主类>] [args...] (执行模块中的主类) 或 java [options] <源文件> [args] (执行单个源文件程序) 将主类、源文件、-jar <jar 文件>、-m 或 --module <模块>/<主类> 后的参数作为参数 传递到主类。 其中,选项包括: -cp <目录和 zip/jar 文件的类搜索路径> -classpath <目录和 zip/jar 文件的类搜索路径> --class-path <目录和 zip/jar 文件的类搜索路径> 使用 ; 分隔的, 用于搜索类文件的目录, JAR 档案 和 ZIP 档案列表。 -p <模块路径> --module-path <模块路径>... 用 ; 分隔的目录列表, 每个目录 都是一个包含模块的目录。 --upgrade-module-path <模块路径>... 用 ; 分隔的目录列表, 每个目录 都是一个包含模块的目录, 这些模块 用于替换运行时映像中的可升级模块 --add-modules <模块名称>[,<模块名称>...] 除了初始模块之外要解析的根模块。 <模块名称> 还可以为 ALL-DEFAULT, ALL-SYSTEM, ALL-MODULE-PATH. --list-modules 列出可观察模块并退出 -d <module name> --describe-module <模块名称> 描述模块并退出 --dry-run 创建 VM 并加载主类, 但不执行 main 方法。 此 --dry-run 选项对于验证诸如 模块系统配置这样的命令行选项可能非常有用。 --validate-modules 验证所有模块并退出 --validate-modules 选项对于查找 模块路径中模块的冲突及其他错误可能非常有用。 -D<名称>=<值> 设置系统属性 -verbose:[class|module|gc|jni] 为给定子系统启用详细输出 -version 将产品版本输出到错误流并退出 --version 将产品版本输出到输出流并退出 -showversion 将产品版本输出到错误流并继续 --show-version 将产品版本输出到输出流并继续 --show-module-resolution 在启动过程中显示模块解析输出 -? -h -help 将此帮助消息输出到错误流 --help 将此帮助消息输出到输出流 -X 将额外选项的帮助输出到错误流 --help-extra 将额外选项的帮助输出到输出流 -ea[:<程序包名称>...|:<类名>] -enableassertions[:<程序包名称>...|:<类名>] 按指定的粒度启用断言 -da[:<程序包名称>...|:<类名>] -disableassertions[:<程序包名称>...|:<类名>] 按指定的粒度禁用断言 -esa | -enablesystemassertions 启用系统断言 -dsa | -disablesystemassertions 禁用系统断言 -agentlib:<库名>[=<选项>] 加载本机代理库 <库名>, 例如 -agentlib:jdwp 另请参阅 -agentlib:jdwp=help -agentpath:<路径名>[=<选项>] 按完整路径名加载本机代理库 -javaagent:<jar 路径>[=<选项>] 加载 Java 编程语言代理, 请参阅 java.lang.instrument -splash:<图像路径> 使用指定的图像显示启动屏幕 自动支持和使用 HiDPI 缩放图像 (如果可用)。应始终将未缩放的图像文件名 (例如, image.ext) 作为参数传递给 -splash 选项。 将自动选取提供的最合适的缩放 图像。 有关详细信息, 请参阅 SplashScreen API 文档 @argument 文件 一个或多个包含选项的参数文件 -disable-@files 阻止进一步扩展参数文件 --enable-preview 允许类依赖于此发行版的预览功能 要为长选项指定参数, 可以使用 --<名称>=<值> 或 --<名称> <值>。 C:\Users\Administrator>java version 错误: 找不到或无法加载主类 version 原因: java.lang.ClassNotFoundException: version C:\Users\Administrator>java -version java version "16" 2021-03-16 Java(TM) SE Runtime Environment (build 16+36-2231) Java HotSpot(TM) 64-Bit Server VM (build 16+36-2231, mixed mode, sharing) C:\Users\Administrator>