参考:B站黑马程序员发布的视频内容 PTA
JDK
JAVA程序开发步骤
源文件 .java文件
有一个类是public类,源文件名字与该类名相同 扩展名为java
若源文件没有public类 源文件名字和某个类名相同即可 扩展名为java
例子
有一段java 应用程序,它的主类名是a1,那么保存它的源文件名可以是(A ).
A.a1.java
B.a1.class
C.a1
D.都对
字节码文件 .class文件
如果源文件包含多个类,编译源文件将生成多个扩展名为class的文件。
每个clss的文件只存放一个类的字节码,文件名与类名相同
字节码文件存放在源文件相同的目录下
字面量
1.定义:数据在程序中的书写格式
2.分类
整数、小数、字符串、
字符、布尔、空(不能直接打印,需用字符串形式输出)
3.特殊字面量的书写
制表符 \t
打印时将前面字符串补到8或者8的倍数
空类型:null
变量
使用场景
重复使用某个值 , 某个数据经常发生改变
注意事项
变量只能存一个值
变量名不能重复
一句语句可定义多个变量
使用前一定要赋值
数据类型
补充:定义long、float类型变量 long a = 9999999L float f = 10.1 F
引用数据类型:除基本数据类型外均为引用类型 如数组
标识符
- 定义:给类、方法、变量等起名
- 命名规则
硬性要求
由数字、字母、下划线(_)、美元符($)组成
不能以数字开头
不能是关键字
区分大小写
软性要求
小驼峰命名法(方法、类名)、大驼峰命名法(类名)
键盘录入
补充:
参数
形参
方法中定义的参数
实参
实际参与的参数 方法中调用的参数
传递基本数据类型时传递的是实际值 形参改变不影响实参值
传递引用数据类型时传递的是地址值 形参改变 影响实参值
类型转换
隐式转换
取值范围小自动转为范围大的
byte short char 在运算时直接转变为int,再进行运算
强制转换
byte r = (byte)(b1+b2)
算术运算符
+
_
*
% 取模
应用场景:
- 判断A是否可以被B整除
- 判断A是否为偶数 A%2 结果为2->偶数 结果为1->奇数
- 斗地主发牌 每张牌定序号 序号%3 结果1->玩家1 以此类推
- 数值拆分
个位:数值%10
十位:数值/10%10
百位:数值/100%10
千位:数值/1000%10
字符串的“+”操作
当“+”操作中出现字符串时 “+”为字符连接符,而不是算术运算符
e.g “123”+123 “123123”
连续进行“+”操作时 从右往左逐个执行
e.g 1+99+“黑马” 100黑马
当字符+字符 字符+数字 字符会通过ASCII码表查询到对应数字再进行计算
A:65 a:97
自增自减运算符
单独使用 ++ 或-- 单独一行 结果都一样
参与计算 b=a++ 现加后用 b=++a 先加后用
例子:
补充:
+= -= *= /= %= 最后结果会转换为原来的类型
a+b的值赋值给a
关系运算符 比较运算符
== != > >= < <=
运算结果都是boolean类型 要么true 要么false
三元运算符
运用三元运算符后一定要使用,否则报错
格式:关系表达式?表达式1:表达式2;
计算规则:
先计算关系表达式
若值为true 表达式1值就为运算结果
false 表达式2值为运算结果
短路逻辑运算符
&& 短路与 左边为false 则整个表达式为false
|| 短路或 左边为true 则整个表达式为true
- 分支语句
if :一般是对范围的判断
switch:把有限的数据一一列举,任选其一
switch格式:
switch(表达式){
case 值1:
语句体;
break;
default:
语句体n+1;
break;
}
case 穿透
语句没有break导致
使用场景:多个case的语句体重复 考虑使用case穿透去简化代码
- 跳转语句
continue
跳过本次循环,继续下一次循环
break
结束整个循环
- 数组
一种容器
int类型数组容器(byte short int )
doube类型数组容器 (byte short int long float double)
静态初始化
手动指定数组元素
格式
数据类型[] 数组名 = { }
int[] arr = {11,22,33};
获取数组内元素
数组名[索引]
动态初始化
手动指定数组长度(明确元素个数)
格式
数据类型[] 数组名 = new 数据类型[数组长度];
String[] arr = new String[50];
添加元素
arr[0]=”sdss”;
数组常见的操作
求最值 max的初始化一定要是数组中的值
求和
数据交换
打乱数据 在无规律的一堆数据中随机抽取 将数据放入数组中再随机抽取一个索引
- 获取随机数
1.导包
2.Random r = new Random();
3.int n = r.nextInt(随机数范围);
- 方法
方法是程序中最小的执行单元
重复的、具有独立功能的代码抽取到方法中
方法定义
格式
public static void 方法名(){
方法体;
}
public static void 方法名(参数){
方法体;
}
public static 返回值类型 方法名(){
方法体;
}
方法调用
方法名(); play();
方法名(参数); play(10); play(10,20);
带返回值:
直接调用 方法名(实参);
赋值调用 整数类型 变量名=方法名(实参);
输出调用 Sout(方法名(实参));
方法重载
同一个类中,方法名相同,参数不同的方法
与返回值无关
参数不同:个数不同、类型不同、顺序不同
方法注意事项
方法必须先定义后调用,否则程序报错
方法调用,参数的数量要与方法定义中小括号内变量一一对应,否则报错
return语句下面,不能编写代码,因为永远执行不到,属于无效代码
return 无返回值 表示结束方法
return有返回值 表示结束方法和返回结果
- 面向对象
面向对象三大特征:封装 继承 多态
类和对象
类:对象共同特性的描述
对象:真实存在的具体东西
JAVA中,必须先设计类,才能获得对象
定义类
public class 类名 {
成员变量 定义格式:修饰符 数据类型 变量名称 = 初始化值; 一般有默认初始值
成员方法
}
多个class类 只能有一个类被public修饰
得到类对象
类名 对象名 = new 类名();
修饰符
private
可修饰成员(成员方法、成员变量)
被public修饰的成员只能在本类中才能被访问
每一个私有化的成员变量都要提供get和set方法
set方法:给成员变量赋值 有形参 无返回值
get方法:对外提供成员变量的值 无形参 ,有返回值
static(静态变量 静态方法 特点 调用方式 注意事项)
就近原则
谁离我近就用谁
This
作用:可区分成员变量 局部变量
例子:
如果局部变量和成员变量同名,如何在局部变量作用域引用成员变量?(B )
A.不能引用,必须改名,使它们的名称不相同
B.在成员变量前加this,使用this访问该成员变量
C.在成员变量前加super,使用super访问该成员变量
D.不影响,系统可以自己区分
补充:成员变量与局部变量的区别
本质:代表方法调用者的地址值
构造方法(格式 特点 执行时机)
继承
格式
public class Student extends Person {}
特点
JAVA只支持单继承,不支持多继承,但支持多层继承
单继承:一个子类值继承一个父类
多层继承:子类A继承父类B 父类B继承父类C
继承后子类的特点(子类继承了父类哪些东西)
父类的属性和行为 子类都可使用
父类的构造方法 子类不可继承
构造方法与public修饰的类名一致 public修饰的类名与文件名一致,不满足