JVM、JRE、JDK

Jvm就是一个虚拟的用于执行bytecode字节码的“虚拟计算机”。它也定义了指令集、寄存器集、结构栈、垃圾收集堆、内存区域。Jvm负责将java字节码解释运行。
JRE:Java的运行环境。包含java虚拟机、库函数、运行Java应用程序所必须的文件。
JDKJava的软件开发工具包。包含jre,以及增加编译器和调试器等用于程序开发的文件。
image.png
image.png

环境变量Path的配置

image.pngimage.png
注:classpath配置问题:如果使用jdk1.5以上就不需要配置这个环境变量,jre会自动搜索当前路径下的类文件及相关的jar文件

常用的DOS命令

image.png

标识符的使用规范

  1. 标识符必须以字母、下划线、$开头。其它部分可以有数字的任意组合
  2. 标识符不可以是java的关键字
  3. 表示类名的标识符每个单词的首字母大写 如:GodMan
  4. 表示方法和变量的标识符,第一个单词小写,第二个单词起每个单词的首字母大写(驼峰原则)。如:addOrder( );
  5. 常量用大写字母和下划线。用final来定义一个常量 初始定义后不能再改变其值 。如:MAX_VALUE 、final double PI = 3.14.

变量

局部变量

方法或语句块内部定义的变量。生命周期是从声明位置开始到方法或语句快执行结束。局部变量使用前必须先声明、初始化再使用。

成员变量

方法外部、类的内部定义的变量从属对象,生命周期便随对象始终。它会自动初始化成该类型的默认初始值。

image.png

静态变量

使用static定义,从属类,生命周期伴随类始终,从类加载到卸载。

数据类型分类:

image.png
Java中基本数据类型都是值传递,传递的是值得副本,形参的改变不会影响实际参数的值引用传递传递的是引用类型数据,包括String,数组,列表, map,类对象等类型,形参与实参指向的是同一内存地址,因此形参改变会影响实参的值

八进制数:要求以0开头,如:015
十六进制数:要求以0x或0X开头,如:0x15
二进制数:要求以0b0B开头,如:0b0101110

浮点数是不精确的,一定不要用于比较!如果要使用精确浮点运算,使用math包下的BigDecimal

字符型变量/常量

字符型在内存中占2个字节,在java中使用单引号来表示字符型常量。

Boolean类型

Boolean类型有两个常量,true、false,在内存中占一个位

逻辑运算符

image.png

异或运算(^)

以二进制数据为基础进行运算。先转换成二进制数据后,再进行运算。异域中同位如果值相同则为0,不同为1

字符串连接符
+ 运算符两侧只要有一个是字符串型,系统就会自动把另一个操作数转换为字符串后连接。

强制类型转换
运算符“()”中的type表示将值var想要转换成的目标数据类型。

  1. double x = 3.14;
  2. int nx = (int)x; //值为3
  3. char c = 'a';
  4. int d = c+1;
  5. System.out.println(nx);
  6. System.out.println(d);
  7. System.out.println((char)d);

方法

  1. 用来完成特定功能的代码段,方法是类和对象行为特征的抽象,**方法从属于类和对象**。
  1. public class Test20 {
  2. /** main方法:程序的入口 */
  3. public static void main(String[] args) {
  4. int num1 = 10;
  5. int num2 = 20;
  6. //调用求和的方法:将num1与num2的值传给add方法中的n1与n2
  7. // 求完和后将结果返回,用sum接收结果
  8. int sum = add(num1, num2);
  9. System.out.println("sum = " + sum);//输出:sum = 30
  10. //调用打印的方法:该方法没有返回值
  11. print();
  12. }
  13. /** 求和的方法 */
  14. public static int add(int n1, int n2) {
  15. int sum = n1 + n2;
  16. return sum;//使用return返回计算的结果
  17. }
  18. /** 打印的方法 */
  19. public static void print() {
  20. System.out.println("北京尚学堂...");
  21. }
  22. }

静态方法调用非静态方法

静态方法不能直接调用非静态方法。但传递一个对象的引用到静态方法里,通过这个引用,可以调用非静态方法和访问非静态数据成员了

  1. public class test {
  2. int i=1;
  3. static void add(test t) {
  4. System.out.println("静态方法");
  5. t.add();
  6. }
  7. void add(){
  8. System.out.println("非静态方法add"+i);
  9. }
  10. public static void main(String[] args) {
  11. test t = new test();
  12. add(t);
  13. }
  14. }

重写

发生在父子类中方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为private则子类就不能重写该方法

重载

方法的重载是指一个类中可以定义多个方法名相同,但参数不同(类型、顺序、个数)的方法方法返回值和访问修饰符可以不同。 调用时,会根据不同的参数自动匹配对应的方法。

  1. //编译错误,返回值不同不是重载
  2. public int add(int a,String b)
  3. public String add(int a,String b)
  1. public class Test21 {
  2. public static void main(String[] args) {
  3. System.out.println(add(3, 5));// 8
  4. System.out.println(add(3, 5, 10));// 18
  5. System.out.println(add(3.0, 5));// 8.0
  6. System.out.println(add(3, 5.0));// 8.0
  7. System.out.println();// 0个参数
  8. System.out.println(1);// 参数是1个int
  9. System.out.println(3.0);// 参数是1个double
  10. }
  11. /** 求和的方法 */
  12. public static int add(int n1, int n2) {
  13. int sum = n1 + n2;
  14. return sum;
  15. }
  16. // 方法名相同,参数个数不同,构成重载
  17. public static int add(int n1, int n2, int n3) {
  18. int sum = n1 + n2 + n3;
  19. return sum;
  20. }
  21. // 方法名相同,参数类型不同,构成重载
  22. public static double add(double n1, int n2) {
  23. double sum = n1 + n2;
  24. return sum;
  25. }
  26. // 方法名相同,参数顺序不同,构成重载
  27. public static double add(int n1, double n2) {
  28. double sum = n1 + n2;
  29. return sum;
  30. }
  31. //编译错误:只有返回值不同,不构成方法的重载
  32. public static double add(int n1, int n2) {
  33. double sum = n1 + n2;
  34. return sum;
  35. }
  36. //编译错误:只有参数名称不同,不构成方法的重载
  37. public static int add(int n2, int n1) {
  38. double sum = n1 + n2;
  39. return sum;
  40. }
  41. }

toString()方法

重写toString方法后会使哈希码能够打印出来
是因为调用了out.print()方法
仔细看源代码,在PringStream类中,print方法是这样写的
image.png
此时调用了String的静态方法valueof
这个方法是这样的
image.png
这里调用了toString方法

而所有的java对象都派生自Object,如果没有对该方法做重写
则会调用super.toString()
Object中这个方法是这样定义的
image.png
所以打印结果为classname+@hashcode 是对象的存储地址

当重写了toString方法后,根据java的动态绑定原理,调用的为当前对象的toString()方法,所以当你重写了student的toString方法后,打印结果是自己重写的方法

快捷键

CTRL + D 删除当前行
CTRL + Alt+ 上下方向键向上/下 复制当前行
ALT + 上下方向键向上/下 替换行
ALT + SHIFT + 上下方向键向上/下快速选择
CTRL + T 显示当前类继承关系列表
Ctrl + Shift + [ 代码区分屏
Ctrl + pageup/pagedn 代码区切换
Ctrl + M 窗口最大化
Shift +table 代码向左缩进
ALT + SHIFT +R 重构变量

IDEA

shift+alt 多行编辑
Ctrl + Shift +y 大小写转换
Ctrl + Shift +f 代码格式化
alt+enter 生成变量返回值
alt+insert 生成构造器/get set等
CTRL+ALT+T try-catch
CTRL+ALT+O 去除无效包