一、JAVA入门与第一个项目
1.0 计算机语言发展史
1.1 java三个版本
javase JAVA标准版,定义为个人计算机的应用。 javaee JAVA企业版 ,定义为服务器端的应用。 javame java微型版micro edition,定义在消费性的电子产品上。
javame已经趋于末路,逐步被安卓取代。
javaee是找工作的。javaee包含了javase,所以必须从javase学起。
javame≠安卓开发。
1.2 JAVA的核心优势
最大的核心优势:跨平台。
- 跨平台/可移植
- 安全性
- 面向对象
- 简单
- 高性能
- 分布式
- 多线程
- 健壮性
1.3 JAVA应用程序的运行机制
高级语言有编译型与解释型俩种,而java是俩种的结合。例如,C语言是编译型语言,python是解释型语言。
java避免了与操作系统直接进行交互,通过了jre这样的一个中介。
1.4 JDK,JRE,JVM的区别与作用
JVM是JAVA virtual machine的简写。他负责处理字节码文件,直接与OS打交道,他负责解释java编译后生成的字节码文件。
JRE 是JAVA runtime environment的简称,他包含了java虚拟机,库函数以及运行java应用程序所需的文件。
JDK是java development kit java开发套件的简称,他是包含了JRE,还增加了编译器和调试器等有关开发的文件。
包含关系图
1.5 JDK安装&JAVA环境变量配置&测试安装成功
JAVA环境变量配置
PS:使用%JAVA_HOME%是引用系统变量,因为之后的JAVA学习都会用到这个变量,为了简洁,直接定义一个系统变量,然后path路径引用它即可。
补充: src.zip是JDK的源代码。
JDK很多公司都可以自己实现,oracle公司是平时默认常说的JDK。
1.6 第一个JAVA程序
javac负责编译,java调用虚拟机。每一次的代码修改都需要进行编译后执行。报错信息可追溯。
在java源文件的目录下,执行命令 javac 源文件名.java 这句的意思是将源文件编译成字节码文件。 java 源文件名 这句是调用虚拟机解释字节码文件,输出运行结果。这句话源文件不需要在源文件名后加.class。
不仅仅只有编译错误,还会有执行错误。
1.7 java代码规范&常用的DOS命令
1.8 常用开发工具
更加强大的记事本 notepad ++,ultraedit,editplus。
工作中的IDE,常用
eclipse不需要安装,解压就可使用。并且选择的工作空间存放着自己的源代码。
1.9 项目结构
src目录存放源代码,bin目录存放class字节码文件。在eclipse里创建class文件时会自动编译成class文件,也会在目录中生成java文件。
1.10 IDEA
1.下载
2. 安装与配置
第三项暂时理解为一个文件夹。
新建一个class文件,然后可以编辑。
1.11 第一个项目java台球小游戏
二、变量&数据类型&运算符
2.1 预备知识
0.二进制
1.注释
注释信息不会出现在class字节码文件中,编译会忽略注释。
注释有3种。//单行注释 /* */多行注释 /** */文档注释
多行注释可以实现在行内注释。
2. 标识符
标识符开头有符号的严格限制。字母包含了汉字,因为采用了unicode编码。所以这里的字母是广义的含义。
注意书写规范,也就是驼峰原则。
3.JAVA关键字/保留字
这些关键字不能用来作变量名。
注意,不需要背下来,边用边记。
2.2 变量
1.变量的本质
变量是OS分配的一块内存的名字,变量必须定义其类型,因为OS根据变量类型分配合适的空间,这样可以合理使用内存资源。
2. 变量的分类与作用域
变量类型有3种:局部变量,成员变量,静态变量。
局部变量(local variable):定义在方法或语句块内部的变量。从属于方法。
成员变量(member variable)方法外部,类内部的变量,又被称为实例变量。成员变量会自己赋初值,区别于局部变量。
静态变量:(static variable)又称为类变量,从属于类,生命周期是整个类。
3 常量(constant)与final
常量命名规范为大写和下划线,例如MAX
常量不可更改,变量用final修饰就变为常量。
例如,final String NAME="fcj" ;
2.3 基本数据类型
注: boolean占用1位。其他都是字节单位。引用数据类型是4字节代表了对象的地址。
1. 整型
整型范围与运行java代码的机器无关,这也是java跨平台的原因之一,而C和C++需要根据处理器整型范围有所不同。
例如 int a=15 整型变量a 整型常量15
整型常量默认是int型。long globalPopulation=7200000000(L)。尽管已经定义了long,但是后面整型常量超过了int。所以在后面加L或l。
2. 浮点型
浮点型常量默认为double。浮点型表示的数很大。因为小数无法精确。涉及到小数的表示又存在一种科学记数法。
为了合理分配空间,因为浮点数常量默认double,所以在浮点常量后面加F或f,这样这个数就表示float了。
float a=3.14F; double b=6.28; double b =628E-2;
注:浮点数不精确,一定不要用于比较。非要比较,用bigdecimal.
BigDecimal bd2=BigDecimal.valueOf(1.0/10.0)
3. 字符与转义字符
unicode编码有16位 61字符编码为a。
转义字符的目的就是让我们能够打印出一些特殊的字符。
4. boolean布尔类型
注意:在java中true,false不能用1,0替代。区别于C。
2.4 运算符(operator)
计算机的一大作用:进行数学运算。
1 算术运算符
运算规则
float f1 = 3.14 //报错,默认为double
float f1 = 3.14F
注意,余数的符号是跟随左操作数的。
int a = 3;
int b = ++a; //b=4
int a = 3;
int b = a++; //b=3
2 赋值运算符及其扩展运算符
a *= b + 3 //相当于a=a*(b+3)
3 关系运算符
结果只有2个 -----true or false
4 逻辑运算符与短路问题
逻辑运算符很重要!!!
5 移位运算符(5个)
~取反 &垵位与 |按位或 ^按位异或 << 左移 >> 右移
int a = 2 <<2;//左移一位等于乘2 8
int b = 12 >>2;//右移一位等于除以2 3
注:推荐使用移位运算实现乘除,这是因为移位运算操作效率高。
6 字符串连接符
+ 只要有一侧当做字符串使用,那么他就会把字符连接起来。
int a = 3+4;
string b = “3”+4;//输出34
注意字符串不是基本数据类型,它是一个对象。字符串又区别于字符。
char d = 'a' ; d+4 结果为101; 字符当做整数处理。
双引号字符串,单引号是字符。
7 三目运算符(条件运算符)
x ? y : z 当x为true,值为y, x为false,值为z 。
8.运算符优先级
大致有印象即可。
逻辑非,逻辑与,逻辑或三者的优先级掌握一下。逻辑非> 逻辑与 > 逻辑或。尽量用小括号()组织起来。
2.5 数据类型转化
1 自动类型转化
容量小的自动转化为容量大的数据类型。容量小的转换容量大的精度会丢失。容量不是字节大小。例如long是8字节,float是4字节。但float比long类型容量大。 long会自动转换为float。
long e = 2.71F//报错
long e = 2.89//报错2.89默认为double;
2 强制类型转化
当然容量大的也并非不能转化成容量小的数据类型。
- 语法 (数据类型)var
输出:3 98 b
3. 基本数据类型转换常见错误与问题。
当俩个很大的操作数进行乘法是很容易溢出,这时可以给一个操作数转化为long类型,之后运算结果就是long的类型。不易产生溢出。
long类型尽量写大写的L。
案例:计算题
4. 简单的键盘输入与输出
相关代码
一个 java语句的结束看的是分号,不是其他的。
三. 控制语句
3.1 条件判断结构
1. if单分支
案例:掷骰子
建立一个包,在这个包中建立类文件,写入游戏代码。
2. if……else……双选择结构
3. 多条件的结构
4. switch选择结构
crtl+鼠标点击可以打开点击的的源码。
多选择结构练习代码
3.2 switch语句
break表示结束switch语句。switch语句可读性更强,多值判断推荐使用switch。
switch (表达式) {
case value1: {
yield type;
break;
}
case value2: {
yield type;
break;
}
default:
默认表达式;
}
3.3 循环结构
1. while循环
public class test001 {
public static void main(String[] args){
//1~100累加和
int i = 0;
int sum = 0;
while (i<=100) {
sum += i;
i++;
}
System.out.println("sum ="+ sum);
}
}
println中的ln作用是打印换行。去掉ln直接打印不换行。
2. for循环_dowhile应用
do while先执行,后判断。实际工作用的较少。重点在于for循环。
for(;;){ 等价于whlie(true)
}
3. 嵌套循环
经典练习题打印9*9乘法口诀表。
package test01;
public class 乘法口诀表 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
for(int i = 1;i <=9;i++) {
for(int j=1;j<=i;j++) {
System.out.print(j+"*"+i+"="+(i*j)+"\t");
}
System.out.println();
}
}
}
3.4 break-continue语句
break强行退出循环,不执行之后的循环次数。
continue用于中断本次循环,继续执行下一次循环。
Math.round这个方法是取四舍五入。该程序随机产生【0,100)内的随机数,匹配到88则结束。
带标签的俩个语句,类似于goto语句功能,只需了解,不推荐使用。Java没有goto语句。
23 综合案例练习
二、面向对象阶段
1. 方法(method)
类似于面向过程的函数(function)
案例练习
/**
*
*/
package test01;
/**
* 員工處罰表
* @author fcj
*
*/
public class TestMembSal {
/**
* @param args
*/
public static int late(int lateTime,double sal) {
int fine = 0;
if (lateTime<11) {
System.out.println("警告:不能遲到!");
}else if (lateTime<21) {
fine = 100;
}else if (lateTime < 31) {
fine = 200;
}else if (lateTime < 61) {
fine = (int)sal/(30*2);
}else {
fine = (int)(sal/30)*3;
}
System.out.println("罰款:"+ fine);
return fine;
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
late(35, 10000.0);
}
}
2. 方法的重载