基础概念
字面量
整数
小数
字符串""
字符 ‘’
布尔
空
变量
数据类型 变量名 = 数据值
整数 int
浮点 double
变量的基本用法
输出打印
参与计算
修改记录的值
在一个语句中可以定义多个变量
int a =1, e = 0, c= 3;
计算机的存储规则
text image sound三种数据
java 是强类型语言
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LqDY32ZZ-1678363072683)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-06 19.37.55.png)]
long类型要在数字后面加L
float类型要在后面加F
但double不哦那个
布尔类型boolean
最好完全避免使用浮点数进行比较
BigDecimal类可以用来比较
字符拓展
(数据类型)变量名 强制转换
unicode 比如 char c =‘\u0061’==>a
实例变量
从属于对象
使用
static int age;
demo08.age
如果不进行初始化,这个类型的默认值是0 0.0
布尔值 是false
常量
final 不能被修改
修饰符,不存在先后顺序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JmUZjJB3-1678363072684)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-07 15.24.52.png)]
字符串连接符
int a =10;
int b =20;
“”+a+b //1020
a+b+“” //30
三元运算符
x ? y : z
如果x==true ,则结果为y,否则结果为z
包机制
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mZIp9Jtm-1678363072684)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-07 19.05.23.png)]
import 包名
可以在后面加*来导入该package下所有的包
Javadoc
/**
*@author
*@version
*@since
*/
用/**+回车就可以
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TDIPtyOi-1678363072685)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-07 19.38.47.png)]
java流程控制
用户交互Scanner
import java.util.Scanner
Scanner scanner = new Scanner(System.in);
if (scanner.hasNext()){
String str = scanner.next();
System.out.println(str);
scanner.close();
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s0NHUrrc-1678363072685)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-07 19.51.40.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-akNFZc3Q-1678363072686)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-07 19.53.30.png)]
顺序结构
一句一句执行
选择结构
if单选择
if(布尔表达式){
}
- equals() 判断是否相等
if双选择
if
elif
嵌套的if结构
if(){
if(){
}
}
switch多选择结构
switch(expression){
case value:
//语句
break;
case value:
break;
default :
}
循环结构
while循环
while(){
}
do while循环
即使不满足条件,也至少执行一次
do{
}while();//先do后while,至少执行一遍
For循环
for(int i = 1;i<=100;i++){
}
增强for循环
int[] numbers = {10,20,30,40,50};
for(int x :numbers){
System.out.println(x);
}
break continue
break 用于强制退出循环(不终止程序)
continue 用于跳出某次循环(跳过未执行的语句)
关于goto关键字(label)
int count = 0;
outer: for(i=0;i<150;i++){
for(int j=2;j<i/2,j++){
if(i%j==0){
continue outer;
}
System.out.println(i+"");
}
}
java方法
何谓方法
- java方法是语句的集合,他们在一起执行一个功能
==》方法是解决一类问题的步骤的有序组合
方法包含于类或对象中
方法在程序中被创建,在其他地方被引用
- 设计方法的原则 ==》一个方法只完成一个功能
方法的命名用驼峰原则
方法的定义
修饰符 返回值类型 方法名(类型参数 参数名){
···
方法体
···
return 返回值;
}
方法调用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Az4JuoFx-1678363072686)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-08 02.59.47.png)]
方法的重载
重载就是在一个类中,有相同的函数名称,但参数不同
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lTgKqtj2-1678363072686)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-08 15.54.47.png)]
程序会根据参数自动选择使用哪个参数的方法
- 方法名称必须相同
- 参数列表必须不同
- 方法的返回类型可以相同也可以不相同
命令行传参
cd ../ 返回上一级
使用命令行给main函数传递参数 String args[]
可变参数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CikdkCRo-1678363072687)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-08 16.05.56.png)]
在指定参数类型后加一个省略号…
递归
方法自己调用自己
递归头 (尽头)
边界条件
前阶段
返回阶段
递归体
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zurEWsf8-1678363072687)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-08 16.17.20.png)]
数组
数组的定义
相同类型数据的有序组合
数组的声明
int[] nums; //定义(首选)
int nums[]; //效果也一样
nums = new int[10];//这里面可以存放十个int类型的数字
nums[0] =1;//赋值
int[] a = {1,2,3,4};//静态初始化
int[] b =new int[10];//动态初始化:包含默认初始化
数组的四个基本特点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i1m9NjNi-1678363072687)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-08 17.29.21.png)]
数组使用
for each循环
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bwyQoYtx-1678363072687)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-08 19.53.27.png)]
数组可以作为参数也可以作为返回值
多维数组
二维
int[][] array = {(1,2),(2,3),(3,4)};
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3tFNdJGH-1678363072688)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-08 20.06.21.png)]
Arrays类
Arrays.toString(数组) 把数组打印出来,直接打印数组是哈希表形式
Arrays.sort(数组) 对数组进行排序(升序)
Arrays.fill 填充
冒泡排序
public class maopao_sort {
public static void main(String[] args) {
int[] test = {2,45,3,5,7,3};
int[] sortedTest = sort(test);
System.out.println(Arrays.toString(sortedTest));
}
public static int[] sort(int[] a){
int temp = 0;
for (int i = 0; i < a.length-1; i++) {
for (int j = 0; j < a.length-1-i; j++) {
if(a[j+1]>a[j]){
temp = a[j];
a[j] = a[j+1];
a[j+1] =temp;
}
}
}
return a;
}
}
稀疏数组
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pDw3lGzT-1678363072688)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-08 20.43.31.png)]
面向对象OOP
物以类聚,分类的思维模式
属性+方法=类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xsCdnTbN-1678363072688)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-08 21.13.09.png)]
什么是面向对象
以类的方式组织代码,以对象的组织数据
抽象
三大特性
- 封装
- 继承
- 多态
类和对象的关系
类是一种抽象的数据类型,他是对某一类食物整体描述/定义,但是并不能代表某一具体的事物
对象是抽象概念的具体实例
创建于初始化对象
使用new创建对象
//一个项目只存在一个main方法
public class Student{
//属性:字段
String name;
int age;
//方法
public void study(){
System.out.println(this.name+"在学习");
//this 在类里成员方法调用属性或者另一个程序方法要加this
}
}
//创建对象
Student xiaohong = new Student();
Student xiaoming = new Student();
xiaoming.name = xiaoming;
xiaohong.name = xiaohong;
xiaoming.age = 18;
构造器详解
也称构造方法,在创建对象必须调用的
一个类即使什么也不写,也存在构造器
必须与类名相同且无返回值
实例化初始值
一旦定义有参构造,无参构造必须显示定义[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ivTk8Yti-1678363072688)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-08 21.39.08.png)]
alt + insert 可以自动生成构造器
小结
-
类与对象
类是一个模板:抽象,对象是一个具体实例
-
方法:定义 调用
-
对应的引用
引用类型: 基本类型
对象是通过引用来操作的:栈–》堆
-
属性:字段Feild 成员变量
默认初始化
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QtfhCHPq-1678363072688)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-09 00.36.13.png)]
-
对象的创造和使用
必须使用new 关键字创造对象,构造器
对象的属性
对象的方法
-
类:
静态属性 属性
动态行为 方法
封装
高内聚,低耦合
通常,应禁止直接访问一个对象数据的实际表示,而应通过操作接口来访问,这称为信息隐藏
private :私有
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qLq52IjQ-1678363072689)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-09 00.47.28.png)]
有的时候得用公共方法来调用私有属性
继承
父子关系
public class Student extends Person{
}
子类继承父类用extends
子类拥有父类的方法和属性
public
protected
default
private
默认继承object类
java中只有单继承,没有多继承(一个子类只能有一个父类,一个父类可以有多个子类)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rBjIGE1B-1678363072689)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-09 10.26.45.png)]
超类
super.属性或者方法
调用父类的构造器,必须在子类构造器第一行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PIs7aUBB-1678363072689)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-09 10.33.14.png)]
方法重写 override
父类的引用指向了子类
静态方法的调用只和左边,定义的数据类型有关
重写只和非静态方法有关
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MaZqBdSR-1678363072689)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-09 10.44.25.png)]
重写需要有继承关系,子类重写父类
方法名必须相同
参数列表必须相同
修饰符:范围可以扩大,不能缩小 private==》public
抛出的异常:范围,可以被缩小,但不能扩大
多态
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J0hk5QKm-1678363072690)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-09 10.58.11.png)]
可以改为((student) s2).eat
注意事项
- 多态是方法的多态,属性没有 两个类型都有,执行子类;父类子类有父类没有,异常
- 父类和子类,有联系 类型转换异常!ClassCastException!
- 存在的条件:继承关系:方法需要重写,父类引用指向子类对象 Father f1 = new Son();
- static方法,属于类,不属于实例;final 常量 ;private方法 这些都不能重写
instanceof
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4CisbiID-1678363072690)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-09 11.29.53.png)]
是否存在父子关系
类型之间的转化
高 低
Person student = new Student();//父类引用指向子类的对象
低 高
Student obj = (Student) student;//可能会丢失一些精度
static
静态变量 =》类变量(多线程)
可以用 类名.属性 调用
方法可以直接用,而非静态不可以直接调用要先new
public class Person{
{
//匿名代码块
}
static{
//静态代码块
}
public Person{
}
}
匿名代码块不能直接调用
静态代码块直接调用,且只执行一次
先输出静态代码块,再输出匿名代码块,再输出构造方法
import static java.lang.Math.random;//静态导入包
一个类被final定义则不能被继承
抽象类
abstract修饰的类
抽象方法只有抽象的名字没有方向的实现,抽象类的所有方法,继承了他的子类,都必须实现他的方法
public abstract class Action{
public abstract void doSomething();
}
不能new这个抽象类,只能靠子类去实现它:约束
抽象类中可以写普通方法
抽象方法必须在抽象类中
接口
只有规范 自己无法写方法
约束和实现的分离:面向接口编程
接口的本质是契约
interface
类可以实现接口 implements 接口
定义常量:public static final int a =0;
作用
- 约束
- 定义一些方法,让不同的人实现
- public abstract
- public static final
- 接口不可以被实例化,接口中没有构造方法
- implemens可以实现多个接口
- 必须要重写接口的方法
内部类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wta2Cu1K-1678363072690)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-09 18.05.55.png)]
内部类可以访问外部类的私有属性
但是内部类被static就拿不到属性了
一个java里面可以有多个class类,但是只能有一个public class
异常机制 Exception
什么是异常
程序运行中出现的不期而至的各种情况
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cj28FUpH-1678363072690)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-09 19.18.57.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WOcovAvl-1678363072690)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-09 19.22.27.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vvOwYuV6-1678363072691)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-09 19.22.39.png)]
阿斯顿法国红酒快乐!
捕获异常
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xMtMkjtV-1678363072691)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-09 19.29.55.png)]
catch里面写想要捕获的异常类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ig1njePo-1678363072691)(/Users/chenwenshuo/Library/Application Support/typora-user-images/截屏2023-03-09 19.33.48.png)]
支持捕获多个异常
但只能出一个
printStackTrace()打印错误的栈信息
public void test(int a, int b ) throws ArithmeticException{
if (b==0){
throw new ArithmeticException();
}//主动抛出异常
}