目录
1. Java基本常识
JDK java开发工具包
JRE 包含于JRE,JAVA运行时环境
JVM 包含于JRE,JAVA虚拟机
2. Cmd常见命令
启动 Win+R
返回上一级 cd …
返回根路径 cd
查看当前文件夹的内容 dir(linux是ls)
清屏 cls
退出 exit
3. JAVA的跨平台性
JAVA的跨平台性由JVM——JAVA虚拟机(翻译作用)实现,但JAVA的虚拟机本身不具备跨平台性,是JAVA程序具备跨平台性。
4 . JRE+JDK
运行一个已有的Java程序,只有有JRE即可。而开发JAVA程序,则需要JDK
5. Cmd里编译运行Java程序
编译 路径:>javac HelloWorld.java
运行 路径:>java HelloWorld
6. 关键字
特点:
1) 完全小写的字母
2) 在如Notepad++中有特殊颜色
7. 标识符
-
定义:
程序中我们自己定义的内容。eg: 类的名字、方法的名字和变量的名字。 -
命名规则:
-
可以包含英文字母、0-9数字、$、_
-
不能以数字开头
-
不能使用关键字
-
-
规范(建议):
类名:首字母大写,后每个单词首字母大写(HelloWorld)
变量名:首字母小写,后每个单词首字母大写(miniStorage),同方法名
8. 常量的打印输出
9. 数据类型
·基本数据类型
-
整数型 byte short int long
-
浮点型 float double(默认)字符型 char(Java中的char类型可以用来表示中文)
-
布尔型 boolean
·引用数据类型
字符串*、数组、类、接口、Lambda
注意事项
-
字符串是引用数据类型
-
浮点型不一定是精确值(CSAPP闪现)
-
数据范围与字节数不一定相关。long虽然表示的范围小于float,但float采用科学计数法更省空间,float4字节,long8字节。
-
浮点数中默认类型为double。使用float类型需要加后缀F。
整数中默认类型为int。使用long类型需要加后缀L。
10.变量
注意:当输入long类型时记得:
11. 类型转换
·自动类型转换
范围从小到大
注意:float范围大于long范围所以
·强制类型转换
可能发生精度损失、数据溢出
- Byte/short/char可以发生数学运算,如+。
且在运算时会被首先提升成int类型,再进行计算
- boolean类型不能发生数据类型转换
12. 编码表
1) ASCII
2) Unicode:万国码,0-127和ASCII完全相同,从128开始包含更多字符
13. 算术运算符
1) 运算中有不同类型的数据时,结果将会是数据范围大的那种
2) +对char类型来说,计算之前会提升为int再计算
3) +对String字符串类型来说,代表连接操作,任何数据类型和字符串进行连接时结果都会变成字符串。
14. 自增自减运算符
1) 前++:先+后用; 后++:先用后+
2) 常量不能用自增自减运算符
15. 比较运算符
1) 比较运算符的结果一定是一个boolean(true/false)
2) 1<x<3这种形式不允许出现,连续比较时使用逻辑运算符
16. 逻辑运算符
1) 连续比较时:
System.out.println(3 < x && x < 5 );
17. 条件运算符
1) 必须保证?后的两个表达式都符合左侧数据类型的要求。
错误示例:Int result = 3 > 4 ? 2.5 : 10 ;
2) 三元运算符的结果必须被使用
错误示例:a > b ? a : b ;
18. 方法
1) 方法定义的先后顺序不影响
2) 方法定义中不能有嵌套包含关系
3) 需要进行调用:
方法名称();
·方法的重载
多个方法的名称一样,但参数列表不同(println实际上就是进行了多次的方法重载)
参数列表不同的定义:
- 参数个数不同
- 参数类型不同
- 参数的多类型顺序不同
注意:
1. 重载与方法的返回值类型无关
sum的返回值类型为int / double / …其余相同时不可作为方法的重载
2. 重载时方法前的public或static都不是影响因素,这两块不同,其余部分相同时也不能构成有效的重载
public static int sum(int a, double b){
···
};
//参数个数不同
public static int sum (int a, double b, int c){
···
};
//参数多类型顺序不同
public static int sum(double a, int b){
···
}
基本方法的使用:
方法重载的使用:
public class Demo02Method {
public static void main(String[] args) {
byte a=10;
byte b=20;
System.out.println(isSame(a, b));
System.out.println(isSame((short) 20, (short) 20)); //short
System.out.println(isSame(10, 20));
System.out.println(isSame(10L, 20L)); //long
}
public static boolean isSame(byte a, byte b) {
return a == b;
}
public static boolean isSame(short a, short b) {
return a == b;
}
public static boolean isSame(int a, int b) {
return a == b;
}
public static boolean isSame(long a, long b) {
return a == b;
}
}
19. 编译器优化
1) 对byte/short/char来说,只要右侧数值没有超过范围,javac编译器会自动隐含的补上(byte)等
2) 常量优化:给变量赋值时,如果右侧表达式中全是常量,编译器会直接将常量表达式计算得结果。
20. Switch语句
1) Switch()括号中只能是:
基本数据类型:byte/short/char/int
引用数据类型:string字符串/enum枚举
21. 数组
Java中初始化数组的形式:
·动态初始化(指定长度)
数据类型[ ] 数组名称 = new 数据类型[数组长度]
int[] arrayTest1 = new int[300];
String[] arrayTeat2 = new String[5];
·静态初始化(指定内容,会根据内容自动推算长度)
数据类型[ ] 数组名称 = new 数据类型[ ] {元素1,元素2,…};
或者省略格式: 数据类型[ ] 数组名称 = {元素1,元素2,…};
注意:
1.静态初始化的标准格式可以拆分成2个步骤
2.动态初始化的标准格式也可以拆分成2个步骤
3.静态初始化的省略格式不可以拆分2个步骤
//标准静态
int[] arrayTest1;
arrayTest1 = new int[]{1,2,3};
//动态
int[] arrayTest2;
arrayTest2 = new int[5];
- 动态初始化数组时,元素会有默认值:
整数:默认0
浮点:默认0.0
字符:默认’\u0000’;
布尔:默认false
引用:默认null
p.s 静态初始化也有默认值的过程,但系统会自动将默认值替换成大括号中的具体数值
- 获得数组长度
数组名称.length
22.Java的内存划分
·Stack
存放方法中的局部变量,方法的运行一定在栈中运行。
·Heap
凡是new出来的东西,都在堆中。
堆内存的数据都有默认值
3. Method Aera:存储.class相关信息,包含方法的信息
4. Native Method Stack
5. pc Register
23. 字符串
·3种构造方法
public String(); //创建一个空白字符串,不含任何内容
public String(char[] array); //根据字符数组的内容创建字符串
public String(byte[] array); //根据字节数组的内容创建字符(String底层是由byte构造的)
package day01.demo05;
public class Demo05String {
public static void main(String[] args) {
// 空参构造
String str1 = new String();
// 字符串数组构造
char[] charArray = {'A','B','C'};
String str2 = new String(charArray);
// 字节数组构造
byte[] byteArray = {97,98,99}; //注意这里写的是ASCII值
String str3 = new String(byteArray);
}
}
·直接创建
String str = “HELLO”; //直接使用双引号
注意:对于字符串,直接写双引号也是字符串对象(jvm代替我们new了)
·字符串常量池
——1.7+后在堆中*
程序中直接写上的双引号字符串,就在字符串常量池中。
注意:==对于基本类型来说是比较数值,对于引用类型是比较地址值。
因此当有
String str1 = "ABC";
char[] charArray = {'A','B','C'};
String str2 = new String(charArray);
但比较str1==str2时返回值是false。
·字符串比较
为了按照内容比较字符串,我们不能再使用==,而是应该使用下列两个方法进行比较。
1. public boolean equals(Obeject obj)
注意:equals方法具有对称性,也就是a.equals(b)等价于b.equals(a).但如果比较的是一个常量和一个变量,则按照经验会把常量写在前。例如: “abc”.equals(str1)——当str1为null时,若变量在前,则会产生空指针异常。
2. public boolean equalsIgnoreCase(String str)
忽略大小写,比较内容。
·字符串获取
常用方法包括:
package day01.demo05;
public class Demo05StringGet {
// 获取字符串长度
int length = "hahahahahaha".length();
// 拼接字符串
String str1 = "Hello";
String str2 = "world";
String str3 = str1.concat(str2); //Helloworld
// 获取索引位置的字符
char ch = "Hello".charAt(1);
// 查找参数字符串在本字符串中的第一次出现位置,没有则返回-1
String original = "dajiahao";
int index = original.indexOf("jia");
System.out.println(index);
}
·字符串截取
·字符串转换
·字符串分割
正则表达式中.有特殊含义,所以不能直接使用。
字符串练习
1.数组——>字符串
2.键盘输入字符串,并统计大写字母、小写字母、数字、其他的次数。