道路又长又长,旅行就会到来。虽然路途遥远,步履蹒跚,但只要你继续前进,你就会到达彼岸。这是我第一周来沈阳华清学习的远见。我在不断前进和记录...
JDK —— Java Develop Kits (Java开发工具集)
JRE —— Java Runtime Environment (Java运行环境)
JVM —— Java Virtual Machine(Java虚拟机)
ClassLoader —— 类加载器
ByteCode Verifier —— 字节码校验器
Runtime Interpreter —— 运行平台
GC —— Garbage Collection 垃圾回收机制
IDE —— 综合开发环境
- jdk安装和环境变量的配置
- Eclipse的使用
Java之父——James Gosling
Java所属公司 —— Sun公司发行,被子Oracle公司收购
Oracle公司拥有软件:
数据库:Oracle、MySQL
语言环境:Java
Java开发平台:
JAVAME:微型平台(嵌入式平台,嵌入式产品)
JAVASE:标准平台(基础学习、桌面应用开发)
JAVAEE:企业平台(开发企业级项目)
- 编译过程
源代码(*.java) ——> Java编译器(javac) ——>字节码文件(*.class)
- 解释操作过程
Class Loader(类加载器) ——> ByteCode Verifier(字节码校验器) ——> Runtime Interpreter(运营平台)
- 功能:回收系统不使用的内存空间
- 工作时间:在JVM(JAVA Virtual Machine)空闲时间自动回收,内存接近溢出时自动回收
- 垃圾回收机制是没有程序员手动调用的系统级保护线程(程序员不能精确控制和干预)
- 被public修改后的类必须与文件名相同
- 一个java可以有多个文档class,但最多只能有一个被子public所修饰的类
- 在同一个包下,类名不能重复
- 在命名类名时,所有单词的首字母大写(规范)
- 有几个类,会编译生成几个类.class文件
标识符用于命名变量、方法(函数)和类别
- 必须使用数字、字母、_”,“$由¥组成,数字无法开始
- 不能和关键词一样
- 区分大小写
- 避免与系统类库同名
- 尽量知名
注:系统预留的关键词有51个作为特殊用途的单词。
所有关键词都是小写的。
true和false不是关键词,boolean类型的两个值。
NULL,DEFAULT,DO不是关键词
// 单行注释
/*...*/ 段注释
/** ... */生成javadoc文档的注释(经常用于编辑版权)
基本数据类型(简单数据类型)
整数类型 byte(字节)、short(短整形),int【默认类型】、long(长整型)
浮点类型 float(单精度浮点型),double(双精度浮点型)【默认类型】
字符类型 char
布尔类型 boolean :tue false
记:b b c s i f l d
1 8 16 16 32 32 64 64
引用数据类型:类 数组 接口
十进制整数,如21, -1110, 0。
八进制整数,要求以0开头,如0123
十六进制数,0-9,A,B,C,D,E,F组成。要求0x或0X开头,如0x123
二进制数:101001
boolean true 真 false 假 没有非0即为真的说法
char 用的是’’ char类型可以存整数,输出时为某个字符的ASCII码
float 赋值时必须加F 或f
long 赋值时的l可加可不加
自动类型转换
整数类型和浮点类型从小到大都能自动类型转换
- char类型 —— > int 类型
- int 类型 ——> double 类型
强制类型转换(造型)
类型 变量名 = (想要转换的类型) 值;
知识点补充:
1.long l = 1000000000L; 当long类型赋予的值超出int范围时,必须加L或l,若在范围内可不用加,为自动类型转换 int 转 long
2.byte类型计算
byte b1 = 1;
byte b2 = 2;
byte b3 = b1+b2; //报错,结果为int
char类型为基本数据类型,String是类为引用数据类型
Java字符采用Unicode编码,每个字符(每个Unicode编码)占两个字节,转义字符如下:
String类型为字符串,用双引号“”,可以保存多个字符。
char类型为单个字符,用单引号’’,只能保存单个字符。
System.out.print(); //不换行打印
System.out.println(); //换行打印
输入语句
Scanner scan = new Scanner(System.in);//定义一个扫描器对象,从系统输入流中扫描
String str = scan.next(); //开始扫描一行,并且赋值给str
scan.nextXXX();方法被调用一次,则可以多扫描一次
运算符(掌握)
算术运算符+ - * / %
+-*/ 按照四则运算法则,先算*/ 后算+-
/ 如果两侧为整数类型,则 / 为整除,最后的结果也为整数类型
% 取余 模除 取相除后的余数,小数也可用
/后面如果是0,会报算术异常
练习:输入一个四位数,分别提起个位十位百位千位,并打印
赋值运算符= += -= *= /= %=
从右往左,将右侧的算式算完赋值给左侧
a+=b 相当于 a = a+b
/= 后不能跟0
自增自减运算符 ++ - - (重点)
++ 在前 先自增1,再参与运算
++ 在后 先原值计算,再自增1
关系运算符> < >= <= == !=
所有的关系运算符返回的都是boolean类型的值,表示这段关系是否成立
== 和 = 区别 == 表示判断两边的值是否相等 = 表示将右侧的值赋予给左侧
== 在引用数据类型上使用时还要注意符号两侧的地址是否相同,该用.equals()
逻辑运算符&& || ! ^
&& || :短路与 和 短路或
与:
或:
非:
异或:
位运算符 & | << >> (了解)
& 按位与
| 按位或
将前后值都转换为2进制,按照位置进行 & | 运算
3 & 7 = 7
0011
0111 & 同时为1结果为1 有一个为0结果为0
0111 ——> 7
<< 左移位
>> 右移位
2<<2
2——> 0010 左移两位 用0补位 001000 ——>8
2<<2 = 8
三目运算符 ?:
判断表达式?表达式1:表达式2;
判断表达式结果为boolean类型的值
如果判断表达式结果为true ,则执行表达式1
如果判断表达式结果为false ,则执行表达式2
逗号运算符 ,
定义变量时,可以同类型的变量用,分隔
运算符优先级
如果想先算的表达式,用()括起来
“+”的特殊用法
如果+的两侧有字符串,则+为字符串连接符
如果两侧只是数,则作为加法
Day3
补充与复习:
复习:
- 输入与输出语句
System.out.println();
Scanner scan = new Scanner(System.in);
scan.nextXXX();
- Java运算符
算术运算符 +-*/%
赋值运算符 = += -= *= /= %= a+=b a=a+b
自增自减运算符 ++ --
关系运算符 > < >= <= != ==
逻辑运算符 && || ! ^
位运算符 & | << >>
三目运算符 判断表达式?表达式1:表达式2
逗号运算符 ,
if...else...语句
语法:
- if...else...语法
if(判断表达式){
语句块1....
}else{
语句块2....
}
- 先执行判断表达式,返回布尔类型返回值
- 如果为true,则执行语句块1
- 如果为false,则执行语句块2
- if ... else if....语法
if(判断表达式1){
语句块1....
}else if(判断表达式2){
语句块2....
}
......
else{
语句块n....
}
示例:
switch...case...语句
语法:
switch(变量){
case 值1:
语句块1...
[break;]
case 值2:
语句块2...
[break;]
......
case 值n:
语句块n...
[break;]
default :
语句块n+1...
}
- 首先变量的值是多少,根据case值来执行对应的语句块
- 如果语句块中不包含break语句,则会从该case一直往下执行
- 如果没有对应的值,则执行default当中的语句块。
- 在Java1.7之前switch后变量类型只能是byte short int char
之后加入了String类型
注意:
没有break语句
- case语句的顺序会影响最后的结果
- default语句的位置也会影响最后的结果
示例:
while循环
语法:
int i = 值; // 循环初始值
while(判断表达式){
循环体...
i++ ; // 增量表达式
}
示例:
do...while循环
语法:
do{
循环体...
}while(判断表达式);
示例:
与while循环的区别
do...while不管循环条件是否成立,必然执行一次循环体
while先判断循环条件是否成立,很有可能一次循环都不执行。
for循环
语法:
for(循环初值表达式;循环判断表达式;增量表达式){
循环体...
}
- 三个表达式都能省略,中间的;不能省略
- 初值表达式省略,可以在循环上定义初值
- 判断表达式省略,形成无限循环
- 增量表达式省略,也会形成无限循环
Day4
补充与复习:
复习:
- if-else
- switch-case
- while
- do-while
- for
break 和 continue--( 掌握 )
break语句可以在switch.case还有循环中使用
continue可以在循环中使用
break跳出整个循环
continue跳出本次循环
return;语句可以跳出该方法(函数)
System.exit(0); 用来退出整个程序
数组
定义数组
- 数据类型[] 数组名; int[] array;
- 数据类型 数组名[]; double array_d[];
数组赋值
- 数组定义并赋值 数据类型[] 数组名 = {值1,值2,值3....};
int[] array = {1,2,3,4,5};
- 数组定义并开辟空间 数据类型[] 数组名 = new 数据类型[空间大小];
String[] str_arr = new String[10];
访问数组中的元素
使用下标访问数组中的元素,下标从0开始
System.out.println(array[0]);
修改元素的值
array[2] = “哈哈”;
数组的属性和方法
- 属性:数组的长度(元素个数)
arr.length
- int arr2[] = arr.clone() 克隆方法,将arr里的值复制给arr2,但是arr和arr2地址是不同的
- Arrays.sort(数组); 将数组进行正序排列
foreach循环(增强for循环)用于数组、集合 的遍历
因为foreach使用临时变量将数组中的值进行赋值查看,所以改变临时变量不会改变数组原值,foreach只能查看不能修改
顺序查找(掌握)
定义一个int型数组,存储十个值。从控制台输入一个数字,在数组中进行查找,如果找到,输出第一次找到该输入值的下标,如果没有找到,输出-1;
二分查找 [ 折半查找 ] 算法(掌握)
要求:数组必须是有序的,要求每一个元素的值比前面的大。
(还没学,下次发...)