Java 第一天 笔记
1 Java为什么可以流行
(1)互联网的爆发式发展 (2)互联网上的 电子产品,软件环境差异较大,需要一个跨平台的 语言
2 Java的核心优势
跨平台
3 Java各版本和体系构架
Java 平台有三个版本,这使软件开发人员、服务提供商和设备生产商可以针对特定的市场进行开发:
A:Java SE(Java Platform,Standard Edition)。Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,并为 Java Platform,Enterprise Edition(Java EE)提供基础。
B:Java EE(Java Platform,Enterprise Edition)。这个版本以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 2.0 应用程序。
C: Java ME(Java Platform,Micro Edition)。这个版本以前称为 J2ME。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于 Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。
(2)体系构架(点左边链接)
4 JDK ,JRE,JVM
(1)DK(Java Development Kit,Java开发工具包)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。Java Runtime Environment(JRE)是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。JVM是Java Virtual Machine(Java虚拟机)的缩写,是整个java实现跨平台的最核心的部分,能够运行以Java语言写作的软件程序。
JDK(Java Development Kit)
JDK是Java开发工具包,是Sun Microsystems针对Java开发员的产品。
JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。
JDK是整个JAVA的核心,包括了Java运行环境JRE(Java Runtime Envirnment)、一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
①SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。
②EE(J2EE),enterprise edition,企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。
③ME(J2ME),micro edition,主要用于移动设备、嵌入式设备上的java应用程序,从JDK 5.0开始,改名为Java ME。
Java Runtime Environment(JRE)
是运行基于Java语言编写的程序所不可缺少的运行环境。也是通过它,Java的开发者才得以将自己开发的程序发布到用户手中,让用户使用。
JRE中包含了Java virtual machine(JVM),runtime class libraries和Java application launcher,这些是运行Java程序的必要组件。
与大家熟知的JDK不同,JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对于使用Java程序的用户。
JVM(java virtual machine)
就是我们常说的java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。
也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。
只有JVM还不能成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib,而jre包含lib类库。
JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
5 Java执行过程
.java (点Java)程序----(编译)--->.class(点class文件)----(执行)--->.通过不同平台的JVM进行本地操作系统来进行操作
6 JDK 下载与安装,环境变量配置
下载地址(点左边链接) 当然CSDN上有很多上传的JDK更方便(Oracle官网加载很慢)(注意JDK位数与操作系统位数匹配 高位兼容低位,反过来不行及64位操作系统可以安装32为JDK,但是32为操作系统不可以安装64位JDK)
安装 : 普通软件安装一样直接下一步(根据自己需求改路径)
环境变量配置 :点击本链接 有详细步骤(注意Path路径%JAVA_HOME%便于后面TomCat引用路径)
7 第一个Java程序Welcome.java
(1)public class Welcome {
public static void main(String[] args) {
System.out.println("欢迎共同学习java!");
}
}
使用Dos运行Java程序
(2)、保存为:C:/Users/zhu/Desktop
(3)、进入控制台(cmd),c:命令进入C盘 C:/Users/zhu/目录。cd命令改变目录 cd Desktop 进入Desktop目录 dir命令查看目录下的文件
(4)、javac Welcome.java
(5)、java Welcome
(6)、出现运行结果:
之后在DOS中输入:java Welcome,会出现“找不到或无法加载主类”的错误提示信息。
解决方法一 :使用set clssspath命令指定Java类的执行路径,然后再次运行:java Welcome,就会出现:欢迎共同学习java!
(在使用set classpath时需要注意等号后面不要有空格!否则仍然会出现“找不到或无法加载主类”的错误信息!!!)
解决方法二
解决方法2:
在系统变量中的classpath值中添加 .; 表示显示当前路径
8 第一个程序小结
(1)一个源文件可以有多个class
(2) 一个源文件中至多只能有一个public修饰的类,其他类个数不限,而且public 修饰的类名称必须和.java(点java )文件名一样
(3)代码有缩进一般tab来缩进
(4)括号成对出现先写完括号 再添加内容
(5)dos常用命令 cd 加目录进入一个目录 如 cd abc 进入abc 目录
dir 查看目录内容 上下键 查看之前输入的命令 Tabb健 命令自动补齐
9 Java 注释
(1)单行注释 : 语句前面加 //
(2)多行注释 /* 内容 */ ye 注释不参与运行。且多行注释不嵌套
10 数据类型
整型 Java语言常用的三种表示形式:
十进制 如 99 -500
八进制 以 字母 O 开头 如 O3
十六进制 要求以Ox或者OX开头。如 Ox 3 Ox A
java 语言整型常默认为int类型 ,声明long型常量可以加l或者L(常用大师大血比)
整型 有 byte 一个字节 -128到0到127
short 2个字节 -32768到0到32767
int 4个字节 -21亿到21 亿 long a = 21000000000(210亿) 由于整型默认为int 已超范围系统报错 故需要在210亿后加L,变为Long long a = 21000000000L 之后编译正常
long 8个字节 -2的63次方到2的63次方-1
浮点型
浮点型表示 有 float
double (系统默认如果想要表示为float 在后面加f即可)
浮点数存在舍入问题,导致很多数值不可以正确表示。如果需要进行不产生舍入的精确数字,需要使用BigDecimal(大小数)类
最好避免比较中使用浮点数(浮点数表示存在误差 1.0 也许是0.9999999)
字符型(char)
常用单引号表示字常量 ‘A’ 是一个字符 而“A”是含有一个字符的 字符串
char类型常用Unicode编码表示字符 占用两个字节 课表示65535个字符
Java语言中还允许使用转义字符‘/’来将其后的字符串转变为其他含义
char 在运算是之间当作整数来运算。可以把 0 到 65535之间的整数直接转化为char
如 c4 = 'a'
int i = c4+2 ; i = 99 此时c4作为数值参与运算
如果 要将 i 输出转化为 字符型 char c5 = i 编译会报错(丢失精度) 因此需要强制类型转换 cha'r c5 = (char)i
11 类型转化
自动类型转化
小容量的类型可以自动转化为大容量的类型
byte char short int float double long
byte b = 123 在范围之内 byte b2 = 300 超出-128到127 编译不通过报错
char c = -3 不在 0到65535 之间报错
char c2 = 'a'
int i = c2
强制类型转化
高容量到低容量 会损失精度 而且 还可能造成溢出 编译报错
char c2 = 12;(编译不通过)
char c2 = (char) 12
当将一种类型强制转化为另一种类型,而又超出目标类型的表示范围 ,就会被截断成为一个完全不同的值
表达式中类型提升的问题
int a = 1;
long b =2 ;
int c = a+b ; 会导致 a+b 结果提升为long 类型 故需要强制转化 int c = (int) a+b
低类型和高类型参与运算 结果类型会以高类型看齐
注意 同类型 运算可能溢出本类型表示范围
int a = 21 亿
int b = 2 ;
long total = a*b 运算 total 的结果为负 因为a*b 的结果超出int 类型表示的范围 截取取值 所有结果为负
正确处理 long total -= aL * b 事先将 a 转化为 long 类型 那么结果向高类型看齐
12 JDK 1.7 新特性
用下划线- 分隔数字 如 int b = 1-1312-1131 int a = ob0-0000-0000-0000-0011 便于查看
下一篇: go 环境安装。