简述
Java是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
语言特性
Java之所以被开发,是要达到以下五个目的:
- 应当使用面向对象程序设计方法学
- 应当允许同一程序在不同的计算机平台执行
- 应当包括内建的对计算机网络的支持
- 应当被设计成安全地执行远端代码
- 应当易于使用,并借鉴以前那些面向对象语言(如C++)的长处。
Java技术主要分成几个部分:Java语言、Java执行环境、类库。一般情况下说Java时并不区分指的是哪个部分。
Java在1.5版本时,做了重大改变,Sun微系统并1.5版本重命名为Java 5.0。
面向对象
Java的特点之一就是面向对象,是程序设计方法的一种。“面向对象程序设计语言”的核心之一就是开发者在设计软件的时候可以使用自定义的类型和关联操作。代码和数据的实际集合体叫做“对象”。一个对象可以想象成绑定了很多“行为(代码)”和“状态(数据)”的物体。对于数据结构的改变需要和代码进行通信然后操作,反之亦然。面向对象设计让大型软件工程的计划和设计变得更容易管理,能增强工程的健康度,减少失败工程的数量。
跨平台性
跨平台性是Java主要的特性之一,跨平台使得用Java语言编写的程序可以在编译后不用经过任何更改,就能在任何硬件设备条件下运行。这个特性经常被称为“一次编译,到处运行”。
执行Java应用程序必须安装Java 运行时环境(Java Runtime Environment,JRE),JRE包括Java虚拟机(Java Virtual Machine,JVM),以及Java平台核心类和基础Java 平台库。[18]通过JVM才能在电脑系统执行Java应用程序(Java Application),这与.Net Framework的情况一样,所以电脑上没有安装JVM,那么这些java程序将不能够执行。
实现跨平台性的方法是大多数编译器在进行Java语言程序的编码时候会生成一个用字节码写成的“半成品”,这个“半成品”会在Java虚拟机(解释层)的帮助下运行,虚拟机会把它转换成当前所处硬件平台的原始代码。之后,Java虚拟机会打开标准库,进行数据(图片、线程和网络)的访问工作。主要注意的是,尽管已经存在一个进行代码翻译的解释层,有些时候Java的字节码代码还是会被JIT编译器进行二次编译。
有些编译器,比如GCJ,可以自动生成原始代码而不需要解释层。但是这些编译器所生成的代码只能应用于特定平台。并且GCJ目前只支持部分的Java API。
甲骨文公司对于Java的许可是“全兼容的”,这也导致了微软和Sun微系统关于微软的程序不支持RMI和JNI接口、并且增加特性为己所用的法律争端。Sun微系统最终赢得了官司,获得了大约两千万美元的赔偿,法院强制要求微软执行Sun微系统关于Java的许可要求。作为回应,微软不再在Windows系统中捆绑Java,最新的Windows版本,Windows Vista和Internet Explorer 7.0版本也不再提供对于Java应用程序和控件的支持。但是Sun微系统和其他使用Java运行时系统的公司在Windows操作系统下对用户提供无偿的第三方插件和程序支持。
Java语言在最开始应用的时候是没有解释层的,所有需要编译的代码都直接转换成机器的原始代码。这样做虽然使程序获得了最佳的性能,但是导致程序异常臃肿。从JIT技术开始,Java的程序都经过一次转换之后才变成机器码。很多老牌的第三方虚拟机都使用一种叫做“动态编译”的技术,也就是说虚拟机实时监测和分析程序的运行行为,同时选择性地对程序所需要的部分进行编译和优化。所有这些技术都改善了代码的运行速度,但是又不会让程序的体积变得失常。
程序的轻便性事实上是软件编写很难达到的一个目标,Java虽然成功地实现了“一次编译,到处运行”,但是由于平台和平台之间的差异,所编写的程序在转换代码的时候难免会出现微小的、不可察觉的错误和意外。有些程序员对此非常头疼,他们嘲笑Java的程序不是“一次编译,到处运行”,而是“一次编译,到处调试”。以Java AWT为例,早期Java AWT内提供的按钮、文字区等均是以计算机系统所默认的样式而显示。这令Java程序在有些没有提供图案的计算机系统产生错误(在Microsoft Windows设有窗口管理器,在一些Linux distribution则没有)。后来Sun微系统针对Java AWT一些问题而推出Java Swing。
平台无关性让Java在服务器端软件领域非常成功。很多服务器端软件都使用Java或相关技术创建。
基本语法
编写Java程序前应注意以下几点:
- 大小写敏感:Java是大小写敏感的,这就意味着标识符
Hello
与hello
是不同的。 - 类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如
**MyFirstJavaClass**
。 - 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写,例如
**myFirstJavaMethod**
。 - 源文件名:源文件名必须和文件内名字唯一且公开(由public 关键词修饰)的类名相同。当保存文件的时候,你应该使用该类名作为文件名保存(切记Java是大小写敏感的),文件名的后缀为
.java
。(如果文件名和类名不相同则会导致编译错误)。 - 主方法入口:所有的Java程序由
public static void main(String[] args)
方法开始执行。
Java关键字
下面列出了Java关键字。这些关键字不能用于常量、变量、和任何标识符的名称。
类别 关键字 说明
访问控制 private 私有的
protected 受保护的
public 公共的
类、方法和变量修饰符 abstract 声明抽象
class 类
extends 扩充,继承
final 最终值,不可改变的
implements 实现(接口)
interface 接口
native 本地,原生方法(非Java实现)
new 新,创建
static 静态
strictfp 严格,精准
synchronized 线程,同步
transient 短暂
volatile 易失
程序控制语句 break 跳出循环
case 定义一个值以供switch选择
continue 继续
default 默认
do 运行
else 否则
for 循环
if 如果
instanceof 实例
return 返回
switch 根据值选择执行
while 循环
错误处理 assert 断言表达式是否为真
catch 捕捉异常
finally 有没有异常都执行
throw 抛出一个异常对象
throws 声明一个异常可能被抛出
try 捕获异常
包相关 import 引入
package 包
基本类型 boolean 布尔型
byte 字节型
char 字符型
double 双精度浮点
float 单精度浮点
int 整型
long 长整型
short 短整型
null 空
变量引用 super 父类,超类
this 本类
void 无返回值
保留关键字 goto 是关键字,但不能使用
const 是关键字,但不能使用
- 注释
注释的作用:标识程序是干什么的,以及它是如何构建的。注释帮助程序员进行相互沟通以及理解程序。注释不是程序设计语言,所以编译器编译程序时忽略它们。
历史版本
- 1995年5月23日,Java语言诞生
- 1996年1月,第一个JDK-JDK1.0诞生
- 1996年4月,10个最主要的操作系统供应商申明将在其产品中嵌入JAVA技术
- 1996年9月,约8.3万个网页应用了JAVA技术来制作
- 1997年2月18日,JDK1.1发布
- 1997年4月2日,JavaOne会议召开,参与者逾一万人,创当时全球同类会议规模之纪录
- 1997年9月,JavaDeveloperConnection社区成员超过十万
- 1998年2月,JDK1.1被下载超过2,000,000次
- 1998年12月8日,JAVA2企业平台J2EE发布
- 1999年6月,Sun微系统发布Java的三个版本:标准版(J2SE)、企业版(J2EE)和微型版(J2ME)
- 2000年5月8日,JDK1.3发布
- 2000年5月29日,JDK1.4发布
- 2001年6月5日,NOKIA宣布,到2003年将出售1亿部支持Java的手机
- 2001年9月24日,J2EE1.3发布
- 2002年2月26日,J2SE1.4发布,自此Java的计算能力有了大幅提升
- 2004年9月30日18:00PM,J2SE1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE1.5更名为Java SE 5.0
- 2005年6月,JavaOne大会召开,Sun微系统公开Java SE 6。此时,Java的各种版本已经更名,以取消其中的数字“2”:J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为Java ME
- 2006年12月,Sun微系统发布JRE6.0
- 2009年12月,Sun微系统发布Java EE 6
- 2010年11月,由于Oracle公司对于Java社群的不友善,因此Apache扬言将退出JCP[17]
- 2011年7月28日,Oracle公司发布Java SE 7
- 2014年3月18日,Oracle公司发布Java SE 8
- 2017年9月21日,Oracle公司发布Java SE 9
- 2018年3月21日,Oracle公司发布Java SE 10
- 2018年9月25日,Oracle公司发布Java SE 11 (LTS)
- 2019年3月,Oracle公司发布Java SE 12
- 2019年9月,Oracle公司发布Java SE 13
- 2020年3月,Oracle公司发布Java SE 14
- 2020年9月,Oracle公司发布Java SE 15
- 2021年3月,Oracle公司发布Java SE 16
- 2021年9月,Oracle公司发布Java SE 17
- 2022年3月,Oracle公司发布Java SE 18
HTML
超文本标记语言(英語:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。HTML是一种基础技术,常与CSS、JavaScript一起被众多网站用于设计网页、网页应用程序以及移动应用程序的用户界面。网页浏览器可以读取HTML文件,并将其渲染成可视化网页。HTML描述了一个网站的结构语义随着线索的呈现,使之成为一种标记语言而非编程语言。
HTML元素是构建网站的基石。HTML允许嵌入图像与对象,并且可以用于创建交互式表单,它被用来结构化信息——例如标题、段落和列表等等,也可用来在一定程度上描述文档的外观和语义。HTML的语言形式为尖括号包围的HTML元素(如<html>
),浏览器使用HTML标签和脚本来诠释网页内容,但不会将它们显示在页面上。
HTML可以嵌入如JavaScript的脚本语言,它们会影响HTML网页的行为。网页浏览器也可以引用层叠样式表(CSS)来定义文本和其它元素的外观与布局。维护HTML和CSS标准的组织万维网联盟(W3C)鼓励人们使用CSS替代一些用于表现的HTML元素。
JavaScript与Java没有什么关系
JavaScript(通常缩写为JS)是一门基于原型和头等函数的多范式高级解释型编程语言,它支持面向对象程式設計、指令式编程和函数式编程。它提供方法来操控文本、数组、日期以及正则表达式等。不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。它由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。目前,它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari和Opera)所支持。
JavaScript与Java在名字和语法上都很相似,但这两门编程语言从设计之初就有很大不同。JavaScript在语言设计上主要受到了Self(一种基于原型的编程语言)和Scheme(一门函数式编程语言)的影响,在语法结构上它和C语言很相似(如if条件语句、switch语句、while循环和do-while循环等)
对于客户端来说,JavaScript通常被实现为一门解释语言,但如今它已经可以被即时编译(JIT)。随着HTML5和CSS3语言标准的推行,它还可以用于游戏、桌面和移动应用程序的开发,以及在服务器端网络环境运行(如Node.js)。
编程语言
分类
1机器语言
2汇编语言
3高级语言(解释型,编译型)
机器语言
机器语言是站在计算机的角度,说计算机能听懂/理解的语言,而计算机能直接理解的就是二进制指令,所以机器语言就是直接用二进制编程,这意味着机器语言是直接操作硬件的,因此机器语言属于低级语言,此处的低级指的是底层、贴近计算机硬件(贴近代指需要详细了解计算机硬件细节、直接控制硬件),详解如下
#机器语言
用二进制代码0和1描述的指令称为机器指令,由于计算机内部是基于二进制指令工作的,所以机器语言是直接控制计算机硬件。
用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码以及代码的含义,然后在编写程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作。编写程序花费的时间往往是实际运行时间的几十倍或几百倍。而且,编出的程序全是些0和1的指令代码,直观性差,不便阅读和书写,还容易出错,且依赖于具体的计算机硬件型号,局限性很大。除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。
机器语言是被微处理器理解和使用的,存在有多至100000种机器语言的指令,下述是一些简单示例
#指令部份的示例
0000 代表 加载(LOAD)
0001 代表 存储(STORE)
...
#暂存器部份的示例
0000 代表暂存器 A
0001 代表暂存器 B
...
#存储器部份的示例
000000000000 代表地址为 0 的存储器
000000000001 代表地址为 1 的存储器
000000010000 代表地址为 16 的存储器
100000000000 代表地址为 2^11 的存储器
#集成示例
0000,0000,000000010000 代表 LOAD A, 16
0000,0001,000000000001 代表 LOAD B, 1
0001,0001,000000010000 代表 STORE B, 16
0001,0001,000000000001 代表 STORE B, 1[1]
机器语言总结
# 1、执行效率最高
编写的程序可以被计算机无障碍理解、直接运行,执行效率高 。
# 2、开发效率最低
复杂,开发效率低
# 3、跨平台性差
贴近\依赖具体的硬件,跨平台性差
汇编语言
汇编语言仅仅是用一个英文标签代表一组二进制指令,毫无疑问,比起机器语言,汇编语言是一种进步,但汇编语言的本质仍然是直接操作硬件,因此汇编语言仍是比较低级/底层的语言、贴近计算机硬件
#汇编语言
汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作。例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能够实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。
汇编的hello world,打印一句hello world, 需要写十多行,如下
; hello.asm
section .data ; 数据段声明
msg db "Hello, world!", 0xA ; 要输出的字符串
len equ $ - msg ; 字串长度
section .text ; 代码段声明
global _start ; 指定入口函数
_start: ; 在屏幕上显示一个字符串
mov edx, len ; 参数三:字符串长度
mov ecx, msg ; 参数二:要显示的字符串
mov ebx, 1 ; 参数一:文件描述符(stdout)
mov eax, 4 ; 系统调用号(sys_write)
int 0x80 ; 调用内核功能
; 退出程序
mov ebx, 0 ; 参数一:退出代码
mov eax, 1 ; 系统调用号(sys_exit)
int 0x80 ; 调用内核功能
汇编语言总结
# 1、执行效率高
相对于机器语言,使用英文标签编写程序相对简单,执行效率高,但较之机器语言稍低,
# 2、开发效率低:
仍然是直接操作硬件,比起机器语言来说,复杂度稍低,但依旧居高不下,所以开发效率依旧较低
# 3、跨平台性差
同样依赖具体的硬件,跨平台性差
高级语言
编译型(比如C语言,C++)
类似翻译,是把程序所有代码编译成计算机能识别的二进制指令(一次性翻译),之后操作系统会拿着编译好的二进制指令直接操作硬件,详细如下
# 1、执行效率高
编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(即机器语言),
因此其目标程序可以脱离其语言环境独立执行,使用比较方便,执行效率较高。
# 2、开发效率低:
应用程序一旦需要修改,必须先修改源代码,然后重新编译、生成新的目标文件才能执行,
而在只有目标文件而没有源代码,修改会很不方便。所以开发效率低于解释型
# 3、跨平台性差
编译型代码是针对某一个平台翻译的,当前平台翻译的结果无法拿到不同的平台使用,针对不同的平台必须重新编译,即跨平台性差
# 其他
现在大多数的编程语言都是编译型的。
编译程序将源程序翻译成目标程序后保存在另一个文件中,该目标程序可脱离编译程序直接在计算机上多次运行。
大多数软件产品都是以目标程序形式发行给用户的,不仅便于直接运行,同时又使他人难于盗用其中的技术。
C、C++、Ada、Pascal都是编译实现的
解释型(如python)
类似同声翻译,需要有一个解释器,解释器会读取程序代码,一边翻译一边执行,详细如下
# 1、执行效率低
解释型语言的实现中,翻译器并不产生目标机器代码,而是产生易于执行的中间代码。
这种中间代码与机器代码是不同的,中间代码的解释是由软件支持的,不能直接使用硬件,
软件解释器通常会导致执行效率较低。
# 2、开发效率高
用解释型语言编写的程序是由另一个可以理解中间代码的解释程序执行的,与编译程序不同的是,
解释程序的任务是逐一将源程序的语句解释成可执行的机器指令,不需要将源程序翻译成目标代码再执行。
解释程序的优点是当语句出现语法错误时,可以立即引起程序员的注意,而程序员在程序开发期间就能进行校正。
# 3、跨平台性强
代码运行是依赖于解释器,不同平台有对应版本的解释器,所以解释型的跨平台性强
# 其他
对于解释型Basic语言,需要一个专门的解释器解释执行Basic程序,每条语句只有在执行时才被翻译,
这种解释型语言每执行一次就翻译一次,因而效率低下。一般地,动态语言都是解释型的,
例如:Tcl、Perl、Ruby、VBScript、JavaScript等
混合型语言(比如Java)
Java是一类特殊的编程语言,Java程序也需要编译,但是却没有直接编译为机器语言,而是编译为字节码,
然后在Java虚拟机上以解释方式执行字节码。
Java---->字节码---->虚拟机
学习开始
我的第一个Java程序
代码样式
public class Hello{ #这一行IDEA在新建时自动生成
public static void main (String[]args){ #程序入口 敲psvm自动生成
System.out.println("Hello world"); #打印 敲sout
}
}
关键字public称为访问修饰符,这些修饰符用于控制程序的其他部分对这段代码的访问级别
关键字class表明Java程序中的全部内容都包含在类中
关键字class后面紧跟类名,Java中定义类名的规则:名字必须以字母开头,后面可以跟字母和数字的任意组合,长度基本没有限制。但不能使用Java保留字作为类名。
代码格式注意
1.java程序严格区分大小写
2.所有标点符号必须是英文状态的标点符号
3.java 文件名.java
4.java类名
下面是运行图片
注释
单行注释
以双斜杠标识,只能注释一行内容,用在注释信息内容少的地方。
// 你注释的内容
多行注释
能注释很多行的内容。为了可读性比较好,一般首行和尾行不写注释信息(这样也比较美观好看)
注意:多行注释可以嵌套单行注释,但是不能嵌套多行注释和文档注释。
/*注释的内容*/
文档注释
能注释多行内容,一般用在类、方法和变量上面,用来描述其作用。注释后,鼠标放在类和变量上面会自动显示出我们注释的内容
注意:文档注释能嵌套单行注释,不能嵌套多行注释和文档注释,一般首行和尾行也不写注释信息。
/**注释的内容*/
例如下面样式
/** 这是一个Java的类
* 类是Java程序可以被执行的最小单元
* 这是一个多行注释的示例
*/
public class HelloWorld {
public static void main(String[] args){
/*
这里是程序的入口
java程序会首先执行这里
*/
System.out.println("Hello World"); //这是一个打印语句
}
}
警告
在Java中,/* */注释不能嵌套。也就是说,不能简单地把代码用/* 和 */括起来作为注释,因为这段代码本身可能也包含一个 */界定符
下面介绍关于cmd的一些基本操作
以win系统做演示
进入cmd
win+R键
输入cmd回车 #进入默认用户盘符
以管理员身份进入
win+R键
输入cmd
Ctrl+Shift+回车键 #以管理员身份进入cmd
常用cmd命令
盘符名称+冒号 盘符切换
E: #进入E盘
查看当前路径下的内容 dir
dir
进入单级目录 cd
cd blog
回退到上一级目录 cd ..
cd ..
进入多级目录 cd 目录1\目录2\
cd blog\source
回退到根目录 cd\
cd \
清屏 cls
cls
退出命令提示符窗口 exit
exit
JDK和JRE
JDK:Java开发工具包
JVM:(Java Virtual Machine)Java虚拟机,运行Java的地方
核心类库:Java已经写好的东西
开发工具:javac 编译工具 java 运行工具 jdb 调试工具 jhat 内存分析工具...
JRE:Java的运行环境
JVM:(Java Virtual Machine)Java虚拟机,运行Java的地方
核心类库:Java已经写好的东西
开发工具: java 运行工具 jhat 内存分析工具...
标签:注释,Java,代码,程序,笔记,学习,编译,机器语言
From: https://www.cnblogs.com/zhangyu520/p/17399133.html