JavaSE1
机器语言的发展史
第一代语言(机器语言)
机器语言
- 计算机的基本计算方式都是基于二进制的方式。
- 二进制: 0101010010110101001
- 这种代码是直接输入给计算机使用的,不经过任何转换
1 01
2 10
3 11
4 100
5 101
6 110
7 111
8 1000
16 10000
32 100000
第二代机器语言(汇编语言)
汇编语言
- 解决人类无法读懂机器语言的问题
- 指令代替二进制
codesg segment start: mov ax, 0123h ; 寄存器送入值 mov bx, 0457h add ax, bx ; ax + bx 寄存器值相加 add ax, ax ; 累加 ax mov ax, 4c00h int 21h ; 程序结束返回 codesg ends end start ; 指定程序入口标号 start
目前应用:
- 逆向工程
- 机器人
- 病毒
- .......
第三代语言(高级语言)
- 摩尔定律
- 当价格不变时,集成电路上容纳的晶体管数目,约每隔18个月便会增加一倍,性能也将提升一倍。换言之,每一美元所能买到的电脑性能,将每隔18个月翻两倍以上。(例子:现在能用过去同样的价格买到性能更好的电脑,现在用5000元买到电脑,比过去5000元买到的电脑性能更好)
- 高级语言
- 大体上分为:面向过程和面向对象两大类。
- C语言是典型的面向过程的语言。C++, JAVA是典型的面向对象的语言。
- 各种语言:
- C语言
- C++语言
- JAVA语言
- C#语言
- Python、PHP、JavaScript
- ......
Java入门
Java的诞生
C & C++
- 1972年C诞生
- 贴近硬件,运行极快,效率极高
- 操作系统,编译器,数据库,网络系统等
- 指针和内存管理
- 1982年C++诞生
- 面向对象
- 兼容C
- 图形领域、游戏等
Java初生
1995年的网页简单而粗糙, 缺乏互动性。
Java语言编写的图形化的程序(Applet)
Java 2标准版(J2SE):桌面
Java 2移动版(J2ME):手机
Java 2企业版 (J2EE):服务器
Java发展
- 基于Java开发了巨多的平台,系统,工具
- 构建工具:Ant, Maven, Jekins
- 应用服务器: Tomcat, Jetty, Jboss, Websphere, weblogic
- Web开发:Struts, Spring, Hibernate, MyBatis
- 开发工具:Eclipse, Netbean, intellij idea, Jbuilder
- .......
- 2006: Hadoop (大数据领域)
- 2008: Android (手机端)
Java特性和优势
- 简单性
- 面向对象
- 可移植性(跨平台)
- 高性能
- 分布式
- 动态性
- 多线程
- 安全性
- 健壮性
Java三大版本
Write once, Run Anywhere
Java2SE: 标准版(桌面开发,控制台开发.....)
JavaME:嵌入式开发(手机,小家电.....)
JavaEE:企业级开发(Web端, 服务器开发.....)
JDK 、JRE、JVM
- JDK: Java Development Kit (java开发者工具)
- JRE: Java Runtime Environment(java运行时环境)
- JVM: JAVA Virtual Machine (java虚拟机)
HelloWorld
- 随便新建一个文件夹,存放代码
- 新建一个java文件
- 文件后缀名为.java
- HelloWorld.java
- 编写代码
public class HelloWorld{
public static void main(String[] args){
System.out.print("Hello World !");
}
}
编译 javac java 文件,会生成一个class文件
运行class文件,java class文件
Java程序运行机制
编译型(compile)
解释型
程序运行机制
Java基础语法
注释
- 单行注释 //
- 多行注释 /* 注释 */
- JavaDoc: 文档注释 /** + 回车
标识符
- 关键字
- Java所有组成部分都需要名字。类名、变量名以及方法名都被成为标识符
- 标识符注意点
- 所有标识符都应该以字母(A-Z或者a-z)、美元符($)、或者下划线(_)开始
- 首字符之后可以是字母(A-Z或者a-z)、美元符($)、或者下划线(_)或数字的任何字符组成
- 不能使用关键字作为变量名或方法名
- 标识符大小写敏感的
数据类型
强类型语言
- 要求变量的使用要严格符合规定,所有变量都必修先定义后使用
弱类型语言
整数拓展
数值 二进制0b 十进制 八进制0 十六进制0x 2 0b10 2 02 0x2 浮点数扩展
-
float f = 0.1f; double d = 0.1; System.out.println(f==d);//false float d1 = 230585403405f; float d2 = d1 + 1; System.out.println(d1==d2);//true
float浮点型表示的数值是一个 有限 离散 舍入误差 大约 接近但不等于的数值,如上面的数值0.1,float和double赋值的大小相等,但是相比出来的结果判断为false,,除此之外,当将很大的数值赋值给float定义的变量,再相加1与原数值相比却判断为ture。
最好完全避免使用浮点数进行比较
-
字符扩展
字符可以强制转换为数字(所有字符的本质还是数字)
-
char c1 = 'a'; char c2 = '中'; System.out.println(c1);//a System.out.println((int)c1);//97 System.out.println(c2);//中 System.out.println((int)c2);//20013
ASCII表(97=a 65=A)
编码 Unicode(统一码) 2字节 0-65536
-
统一码(Unicode),也叫万国码、单一码,由统一码联盟开发,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。
统一码是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
实现方式
在统一码中,汉字“字”对应的数字是23383。在统一码中,我们有很多方式将数字23383表示成程序中的数据,包括:UTF-8、UTF-16、UTF-32。UTF是“UCS Transformation Format”的缩写,可以翻译成统一码字符集转换格式,即怎样将统一码定义的数字转换成程序数据。例如,“汉字”对应的数字是0x6c49和0x5b57,而编码的程序数据是:
BYTE data_utf8[] = {0xE6, 0xB1, 0x89, 0xE5, 0xAD, 0x97}; // UTF-8编码
WORD data_utf16[] = {0x6c49, 0x5b57}; // UTF-16编码
DWORD data_utf32[] = {0x6c49, 0x5b57}; // UTF-32编码
这里用BYTE、WORD、DWORD分别表示无符号8位整数,无符号16位整数和无符号32位整数。UTF-8、UTF-16、UTF-32分别以BYTE、WORD、DWORD作为编码单位。“汉字”的UTF-8编码需要6个字节。“汉字”的UTF-16编码需要两个WORD,大小是4个字节。“汉字”的UTF-32编码需要两个DWORD,大小是8个字节。根据字节序的不同,UTF-16可以被实现为UTF-16LE或UTF-16BE,UTF-32可以被实现为UTF-32LE或UTF-32BE。下面介绍UTF-8、UTF-16、UTF-32、字节序和BOM。
-
char c3 = '\u0061'; System.out.println(c3);//a
转义字符
- \t 制表符
- \n 换行
数据转换
由于Java是强类型语言,所以要进行有些运算的时候,需要用到数据类型转换。
低-------------------------------------------------------------->高
byte,short,char--> int --> long --> float --> double
运算中,不同类型的数据先转换为同一类型,然后进行运算
强制类型转换 (类型)变量名 高-->低
自动类型转换 低--->高
注意点
- 不能对布尔值进行转换
- 不能把对象类型转化为不相干的类型
- 在把高容量转换为低容量的时候,强制转换
- 转换的时候可能存在内存溢出,或者精度问题(float类型的数值23.7,强制类型转换为int类型后数值输出为23,损失精度0.7)
变量
变量是什么:就是可以变化的量!
Java是一种强类型语言,每个变量都必须声明其类型。
Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。
type varName [=value] [{,varName[=value]}];
//数据类型 变量名 = 值;可以使用逗号隔开来声明多个同类型变量
注意事项:
- 每个变量都有类型,类型可以是基本类型,也可以是引用类型。
- 变量名必须是合法的标识符。
- 变量声明是一条完整的语句,因此每一个声明都必须以分号结束。
变量作用域
类变量
实例变量
局部变量
public class Variable{ static int allClicks=0; //类变量 String str="hello world"; //实例变量 public void method(){ int i=0; //局部变量 } }
常量
常量(Constant):初始化(initialize)后不再改变值!不会变动的值。
所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许改变。
//常量形式 //final 常量名=值 final double PI=3.14;
常量名一般使用大写字符
变量的命名规范
- 所有变量、方法、类名:见名知意
- 类成员变量:首字母小写和驼峰原则:monthSalary
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线:MAX_VALUE
- 类名:首字母大写和驼峰原则:Man,GoodMan
- 方法名:首字母小写和驼峰原则:run(),runRun()
运算符
Java语言支持如下运算符:
算数运算符:+,-,*,/,%,++,--(变量名--,先赋值,后自减;--变量名,先自减,再赋值)
赋值运算符:=
关系运算符:>,<, >=, ⇐, ==, != instanceof
逻辑运算符:&&(与),||(或),!(非)
位运算符:&,|,^(异或,相同为0,不同为1), ~(取反), >>(右移), <<(左移), >>> (了解!!!)
条件运算符 ?:
扩展运算符:+=, -=, *=, /=
-
//字符串连接符 + , String int a = 10; int b = 20; System.out.println(""+a+b);//1020, 字符串在前面,数值间进行拼接 System.out.println(a+b+"");//30, 字符串在后面,数值间正常运算
-
包机制
为了更好的组织类,Java提供了包机制,用于区别类名的命名空间
包语句的语法格式
package pkg1[.pkg2[.pkg3...]];
为了能够使用某一包的成员,我们需要在Java程序中明确导入该包,使用”import“语句可完成此功能
import package1[.package2...].(classname|*)
JavaDoc生成文档
- javadoc命令可以用来生成自己API文档的
- 参数信息
- @author 作者名
- @version 版本号
- @since 指明需要最早使用的jdk版本
- @return 返回值情况
- @param 参数名
- @throws 异常抛出情况
- 参数信息
Java流程控制
用户交互Scanner
Scanner对象
- 我们可以通过Scanner类来获取用户的输入。
- 基本语法
Scanner s = new Scanner(System.in)
- 通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hastNext() 与 hasNextLine() 判断是否还有输入的数据。
- next():
- 一定要读取到有效字符后才可以结束输入。
- 对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
- 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
- next()不能得到带有空格的字符串
- nextLine():
- 以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
- 可以获得空格。
- next():
结构
顺序结构
- JAVA的基本结构是顺序结构,除非特别指明,否则就按照顺序一句一句执行。
- 顺序结构是最简单的算法结构。
- 语句与语句之间,框与框之间是按从上到下的顺序进行的。他是有若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。
选择结构
if单选择结构
//语法 if(布尔表达式){ //如果布尔表示式的值为true }
if双选择结构
//语法
if(布尔表达式){
//如果布尔表达式的值为true
}else{
//如果布尔表达式的值为false
}
- if多选择结构
//语法
if(布尔表达式1){
//如果布尔表达式1值为true
}else if(布尔表达式2){
//如果布尔表达式2值为true
}else if(布尔表达式3){
//如果布尔表达式3值为true
}else{
//如果布尔表达式1、2、3的值为false
}
- 嵌套的if结构
- switch多选择结构
- switch语句中的变量类型可以是:
- byte、short、int或者char
- 从Java SE 7 开始,switch 支持字符串 String 类型了
- 同时 case 标签必须为字符串常量或字面量。
- switch语句中的变量类型可以是:
//语法
Switch(expression){
case value:
//语句
break;//可选
case value:
//语句
break;//可选
//可以有任意数量的case语句
default://可选
//语句
}