2024.6.18
10 Java_jdk介绍
1.Java跨平台的原因
虚拟机JVM,不管是什么设备,都是在JVM里面运行,在什么设备就用什么设备的JVM
2.如何安装JVM
包含在jdk里面
3.JDK有什么组成
JDK = JRE + java开发工具(java,javac,Javadoc,javap等),JRE = JVM + Java核心类库。如果只要运行写好的Java程序,只需要安装JRE
P18 Java运行机制
P35 变量原理
讲解了定义一个变量,赋值输出的基本原理
P36 变量概念
1.变量的理解
变量可以理解为一个门牌号,通过门牌号可以找到附件,通过变量名可以访问到变量的值
P37 变量入门
2024.7.3
最近在纠结要不要提前去学校打工,楼上在装修,总是好吵,和朋友绝交了。。。好多事
P38 变量细节
P43 浮点数使用
面试可能问:浮点数在机器中的存放形式 浮点数 = 符号位 + 指数位 + 尾数位
浮点数常量默认为double,如果是float,必须在后面加f
Foat num = 1.1 错误;double num = 1.1f 正确;储存空间大小导致的
通常使用double,为了精度
P44 浮点数细节
浮点数使用陷阱:
Double num1 = 2.7;
Double num2 = 8.1/3; //结果不是2.7,是一个接近2.7的小数,运算的结果是小数的时候,进行相等判断要小心。应该是以两个数的差值的绝对值,在某个进度范围内判断
P45 Java文档
P63 算术运算符
P64 算术运算符使用
/是除,不是取整数商
System.out.println(10/4);//结果是2
System.out.println(10.0/4);//结果是2.5
Double d = 10/4;//结果是2.0
%,取模
%的本质是:a % b = a – a / b * b
System.out.println(10 % 3);//1
System.out.println(-10 % 3);//-1
System.out.println(10 % -3);//1
System.out.println(-10 % -3);//-1
++,自增
作为独立语句i++,++i,是同样的
作为赋值有区别
P81 运算符优先级
2024.7.4
P81 运算符优先级
P82 标识符规则
1.但凡自己可以取名字的地方就叫标识符
2.标识符命名规则
P83 标识符练习
Goto是保留字
P84 标识符规范
P104 顺序控制
P105 分支控制
P106 单分支流程图
P107 双分支使用
P115 switch基本语法
P116 switch流程图
P117switch快速入门
实操:
Import java.util.Scanner;
Public class {
Public static void main{
New myScanner = new Scanner(System.in);
System.out.println(“请输入一个字符”);
Char c1 = myScanner.next().charAt(0);//把接收到的字符串转成一个字符,意思是取第一个
Switch(c1){
Case’ a’:
System.out.println(“今天是星期一”);
Break;
Case ‘b’:
System.out.println(“今天是星期二”);
Bresk;
Defult:
Break;
}
}
}
P122 for基本语法
P123 for执行流程
P124 For细节
P125 for编程思想
做题:打印1~100之间所有9的倍数的整数,统计个数,以及总和(思想:化繁为简,先死后活)对应chapter05 for01.java
心得1:一个一个需求来解决,在第一个需求的基础上解决第二个需求,之前总是想一起把所有的解决了,一个一个加上去,再改,应该是正确的
心得2:代码灵活性进阶,将范围和倍数全部从常量改为变量
P126 for编程思想2
做题:输出计算式
对应chapter05 for02.java
P127 while 基本语法
P128 while 执行流程
2024.7.5
P137 break需求
1.问题:随机生成1~100的一个数,直到生成了97这个数,看看一共用了多少次
2.math.random()返回大于等于0.0,小于1.0的整数。(int) (math.random()*100+1)返回0~100的整数
P139 break执行流程
P156 数组必要性
P157 数组快速入门
可以通过数组.length得到数组的大小
P158 数组使用1
使用方式1:动态初始化
数据类型 数组名[] = new 数据类型[大小]
数组的循环输入和输出,代码见chapter06\Array01.java
使用方式2:动态初始化,先声明再创建
使用方式3:静态初始化
P192 类和对象的引出
P193 类与对象概述
1.对象主要由属性和行为构成
2.类就是数据类型,如cat。对象就是具体的实例
P194 面向对象快速入门
P195 对象内存布局
P196 属性概念
1.常见叫法:成员变量 = 属性 = field(字段)
P197 属性注意细节
属性语法同变量,示例:访问修饰符 属性类型 属性名
访问修饰符包括:public protected 默认 private
2024.7.9
跟老师说清楚了,聊了很久,最后决定不提前去,研0的最后一个暑假在家好好学Java
P197 属性注意细节
1.属性语法同变量,示例:访问修饰符 属性类型 属性名
访问修饰符包括:public protected 默认 private
2.对于新建对象的理解
例:Person p1 = new Person();//new person是新建的一个对象,再被赋值给p1,p1是指向这个新建的对象,可以把p1理解成对象引用,或者对象名。new person()是创建的对象空间,才是真正的对象
P198 创建对象访问属性
1.创建对象的方式
先声明再创建:Car cat; cat = new Cat();
直接创建:Cat cat = new Cat();
2.如何访问属性
对象名.属性
P199 对象分配机制
P200 对象创建过程
Java创建对象流程
示例代码:Person p = new Person();
p.name = “jack”;
p.age = 10;
加载类信息,只会加载一次
在堆中分配空间,进行默认初始化
把地址赋给P,P就指向对象
进行指定初始化
P228 重载介绍
1.基本介绍:Java中允许同一个类中,多种同名方法的存在,但是要求形参列表不一致
P229 重载快速入门
P230 重载使用细节
方法名一样,形参的顺序或类型或都不一样,参数名没有要求,返回类型无要求
P234 可变参数的使用
使用情景示例,三个方法,分别对应两个数、三个数、四个数相加的和,用方法重载写比较麻烦,使用可变参数
写法:public int sum(int… nums){
int res = 0;
for(int I =0; I < nums.length; i++){//将可变参数看成数组
res += nums[i];
}
return res;
}
P237 作用域基本使用
1.Java中主要的变量是属性(成员变量/全局变量)和局部变量(一般就是成员方法中定义的变量)
2.作用域分类:全局变量是整个类,局部变量是在他定义的代码块中
3.全局变量可以不赋值,因为有默认值,局部变量不行
P238 作用域使用细节1
P239 作用域使用细节2
跨类访问属性:在新类的方法中中创建另一个类的对象;在新类的方法中,直接将另一个类传进去
P240 构造器基本介绍
对初始化的理解:相较于属性的默认值,构造器可以在初始化时就对属性进行赋值
基本语法:[修饰符] 方法名(形参列表){
方法体;
}
P241 构造器快速入门
代码见chapter07/javac construstor01.java
P242 构造器使用细节1
P243 构造器使用细节2
javap可以把.class文件从字节码反编译成程序员可以看懂的代码
当有自己定义的构造器,而没有再定义默认无参构造器,用无参方法新建对象会报错,像Dog dog1 = new Dog();这样的是默认无参的
P244 构造器课堂练习
见chapter07\ConstrustorExercise.java
P245 对象创建的流程详解
1.加载Person类信息(Person.class),只会加载一次
2.在堆中分配空间(地址)
3.完成对象初始化(3.1 默认初始化 age = 0, name = null 3.2显式初始化age = 80, name = null 3.3构造器初始化 age = 20, name = 小倩)
4.在对象在堆中的地址,返回给p(p是对象名,可以理解为对象的引用)
P246 引出this
P247 this入门
构造方法:public Dog(String name, int age){
name = name;
age = age;//此时就是自己给自己赋值,Dog dog1 = new Dog(“大户”,18),但是得到的name和age都是默认值
this.name = name;
this.age = age;//此时this.name this.age都是指当前对象的属性name age,再使用Dog dog1 = new Dog(“大户”,18)就可以初始化成功
}
P273 包基本介绍
基本语法:package 包名
P274 包原理
包的本质就是创建不同的文件夹来保存类文件
P275 包快速入门
包可以看成一个目录,在src下建一个com.xiaoming1的包,对应在src文件夹中会有com文件夹,com文件夹中又有xiaoming这个文件夹
P279 访问修饰符规则
P280 访问修饰符细节
P281 封装介绍
P282 封装步骤
P283 封装快速入门
快捷键快速创建get和set:alt和insert
快捷键运行,对于一个文件,第一次手动运行,后面就可以用快捷键的
快速入门案例:
代码见:chapter08:Encapsulation.java
P284 封装与构造器
使用构造器进行设置时,可能会导致防护失效,对于此,可以将set方法写到构造器中。
例:Person(String name, int age, double salary){
setName(name);
setAge(age);
setSalary(salary);//或者是this.setSalary这样的
}
P285 封装课堂练习
代码见Account.java和AccountTest.java.
问题1:没有考虑构造器问题,应该考虑无参和有参构造器,以及咋有参构造器中对设置的保护
问题2:输出的错误提示不够规范
提升:可以在输出结果的info方法中,增加身份校验