三目运算符
数据类型 x = (表达式) ? value1 : value2;
执行流程: 来判断表达式 你如果表达式为true 就将value1赋值给x这个变量, 如果为false 就将value2赋值给变量x
循环结构
while循环
语法格式:
while (布尔表达式) {
语句体
}
执行流程: 当代码执行到while关键字的时候,先去判断布尔表达式,如果布尔表达式为false,就不会执行
语句体。如果布尔表达式为true 执行语句体,然后(重要) 再去判断布尔表达式,如果布尔表达式为true
执行语句体,然后再去判断布尔表达式,直到布尔表达式为false的时候,循环就结束了(就不再执行语句体了)。接着执行循环以外的代码
do-while循环
语法格式:
do {
语句体
} while(布尔表达式);
执行流程:首先代码执行到do 然后执行do后面大括号中的语句体,再去判断while后面的布尔表达式
如果布尔表达式为false的话,就不再执行do后面的语句体了,相当于循环结束
如果布尔表达式为true,再回到do 去执行后面的语句体,执行完语句体之后,再判断while后面的布尔表达式,如果布尔表达式为true的话,就再执行do后面的语句体,然后再去判断while布尔表达式,直到为false的时候,循环结束了
for循环
语法格式:
for (表达式1; 布尔表达式2; 表达式3) {
语句体
}
表达式1: 初始化的条件
表达式2: 终止条件
表达式3: 循环条件
执行流程: 首先执行表达式1,再执行表达式2,如果布尔表达式2为true,执行大括号中语句体。然后再执行表达式3,再执行表达式2,再次判断布尔表达式2,直到为false,就不执行语句体。就意味着循环结束
嵌套循环
一个循环里面套另外一个循环。秉承着一个特点: 从外层循环先进入到内层循环,然后 内存循环先结束
然后再回到外层循环,再进入到内层循环,内层循环结束,再会带外层循环
方法
语法格式:
public static void 方法的名字 () {
//语句体,void无返回值,想要有返回值就应该是相应的返回值类型
//无参数,想要有参数就要在括号里添加 数据类型 形参
}
break和continue
break 结束循环或者switch-case
continue 继续循环,结束本次循环
数组
定义
使用数组: 只需要一个变量,然后数组中存很多的数据
可以作为返回值类型
声明
第一种:
数据类型[] 数组的名字 = {值1, 值2, 值3,...};
或
数据类型 数组的名字 []= {值1, 值2, 值3,...};
第二种:
数据类型[] 数组的名字 = new 数据类型[容量];
或者
数据类型 数组的名字[] = new 数据类型[容量];
第三种:
数据类型[] 数组的名字 = new 数据类型[]{值1, 值2, 值3,...};
赋值
通过下标来复制,下标从0开始
数据类型[] 数组的名字 = new 数据类型[容量];
int[] ints = new int[4];
int[0] = 1;
int[1] = 2;
二维数组
数据类型[][] 数组的名字 = new 数据类型[容量][容量];
选择排序
最小值向前
原理: 找到最小值的索引 , 然后和第一个数据进行交换。。再除了第一个的剩余的数据的最小值索引
然后和第二个数据进行交换。以此类推即可
int[] = {4,3 ,2,1}
先遍历一遍 找到 最小值的索引 3 然后交换位置 {1, 3, 2, 4}
再遍历一遍(除了第一个数) 找最小值的索引 2 然后交换位置 {1, 2, 3,4}
再遍历一遍(除了第前两个数) 找最小值的索引 {1, 2, 3,4}
冒泡排序
最大值交换往后
从小到大进行排序
原理: 比较两个相邻的元素的大小,如果左边比右边大,就交换位置。每一对都要比较
int[] arr = {1, 5, 2,3};
第一轮: for
{1, 5,2,3} 比较1和5
{1,2,5,3}比较5和2
{1,2,3,5}比较的是5和3
第二轮:
{1,2,3,5} 比较 1和2
{1,2,3,5} 比较2 和3
第三轮:
{1,2,3,5} 比较1和2
声明一个类的语法格式
public class 类 {
特征(Java中的变量)
行为(java 中暂时不带static的方法)
}
构造方法
1.构造方法是用来初始化对象的(和创建对象有关)
2.构造方法必须写在实体类中 不是带有main主函数的类中
1.声明一个类的语法格式
calss Person {
属性
String name;
方法
public void eat () {
}
}
2.通过类创建一个对象
Person person1 = new Person();
3.无参数的构造方法语法格式
public 类名 () {
}
4.有参数构造方法的语法格式
public Person (String name, int age) {
this.name = name;
this.age = age;
}
5.构造方法的作用是初始化对象
对象的内存分析
Jvm内存分配,以后还会再讲
区域的名字 | 作用 |
寄存器 | 给CPU使用的,和开发没有关系 |
本地方法栈 | JVM在执行操作系统的时候会使用,和咱们没有关系 |
方法区 | 存储的是字节码文件 class文件 |
堆区域 | 存储对象或者数组的数据,凡是 new的东西和堆有关 |
栈区 | 存储的是八大基本数据类型的数据和对象的引用(内存地址) |
栈:存储的是八大基本数据类型的数据和对象的引用(内存地址)
int a = 20; a 20 都存在栈区了
Peson person = new Person(); 栈 存的是dog的内存地址
堆:
对象的真实的数据 张三 22
构造代码块
现在开发不用了,以后会讲一个叫静态代码块的
构造代码块的目的:也是可以对对象的属性进行赋值。功能是和构造方法是一样的
语法格式:
{ 语句体 }
1.写在实体类中
2.只要实例化一个对象 以后,就会先执行构造代码块,然后再执行构造方法
成员变量和局部变量
局部变量
变量的作用域的问题, 方法a中一个变量,能不能再方法b中使用? 不能
成员变量
定义在实体类中的大括号的里面,也叫属性
成员变量和局部变量区别
区别 | 成员变量 | 局部变量 |
定位位置 | 类的大括号的后面 也叫属性 | 定义在方法体中 |
作用 | 描述一个类的属性或者特征的 | 在方法体中保存变量的值的 |
初始化的值 | 有默认的初始值String=>null int ==>0 | 没有默认的值使用的时候一定要赋值 |
作用域 | 作用整个类 | 只能在当前方法中使用 |
1.对象内存分析
栈中存的是 八大基本数据类I型和对象的引用(内存地址)
堆中存的是 对象的真实的值
2.构造代码块
{
}
构造代码块先于构造方法执行
3.成员变量和局部变量
封装
Java是面向对象的三大特征 ,就是把对象的属性和操作(服务) 结合起来变成一个整体,并尽可能的去隐藏内部的信息
Java封装 对属性的封装, 对方法的封装 , 对类的封装
今天主要讲属性的封装:
之前写的属性 String name; int age;。只需要通过对象.name 赋值和取值即可,这样的话存在一定隐患的。
对属性进行封装:
1.为每个属性加上一个修饰符 private (私有的)
2.在实体类中,书写相对应的set方法和get方法 进行操作