一.逻辑运算符
- & 逻辑与 无论左边真假,右边都要执行 (即使为假,也会继续走下去)
- && 短路与 如果左边为真,右边继续执行,左边为假,右边不执行(有一个为假则为假)
- | 逻辑或 无论左边真假,右边都要执行 (即使为真,也会继续走下去)
- || 短路或 如果左边为假,右边执行 ,如果左边为真,右边不执行 (有一个为真,则为真)
int age = 20;
String name = "majunbao";
if(age == 20 && name.equals("majunbao")){
//左边为true ,继续执行右边
//左边为假 ,直接走else
}else{
}
if(age != 20 & name.equals("majunbao")){
//左边为true ,继续执行右边
//左边为假 ,继续执行右边 ,然后执行else
}else{
}
if(age == 20 || name.equals("majunbao")){
//左边为true ,即为真 不会走右边判断
//左边为假 ,继续执行右边 ,右边为假走else 为真 进入if里面
}else{
}
if(age == 20 | name.equals("majunbao")){
//左边为true ,继续执行右边
//左边为假 ,继续执行右边 ,右边为假走else 为真 进入if里面
}else{
}
二.循环语句
for循环:先判断条件是否成立然后执行循环体
while循环 先判断条件是否成立 然后执行循环体
do...while循环 先执行循环体 在判断条件是否成立(会比for 和 while 多走一遍)
int count = 5;
for(int i = 0 , i < count , i++){
}
while(count>0){
count--;
}
do{
}while(count > 0)
三种循环的区别
- for和while先判断在执行
- do...while先执行后判断
for和while的区别
- for循环的 变量i 只属于for ,for循环结束 不能在使用
- while循环的 控制变量 ,即使循环结束 还可以继续使用
死循环格式
- for(;;){}
- while(true){}
- do{}while(true)
三.内存分配
- 栈内存:存放的是局部变量
- 堆内存:存放的是new出来的内容(实体,对象)
1.栈内存存放的是局部变量,定义在方法中的变量 例如上图arr ,使用完毕 立即消失
2.堆内存存放的是new出来的内容对象或者实体,他会为存储空间添加默认值
整数:0 浮点数:0.0 布尔:false 字符:空字符 引用数据类型:null
每一个new出来的东西都会生成一个内存地址 ,使用完毕后 垃圾回收器空闲时会被回收
四.形参和实参
- 实参:实际传入的参数 ,方法调用中的参数 ,等同于使用的常量和变量
- 形参:方法中拿到的参数,方法中定义的参数 等同于 变量定义格式 int a ,String b
public static void add(int num){
}
add(10)
//num是形参 10是实参 因为 10是实际传入的参数
五.类和对象
1.什么是类
- 类是对现实生活中的一类具有共同属性和行为特征的事物的抽象
2.类的提点
- 类是对象的数据类型
- 类是具有相同属性行为的一组对象集合
3.类和对象的关系
- 类是现实生活中的一类具有共同属性和行为特征的事物的抽象
- 对象是真实存在的实体
ps:类是java中重要组成单位 ,
类的组成 :属性和 行为
属性是 java中的 成员变量
行为是 java中成员方法
4.什么是成员变量 和 局部变量
- 成员变量 类中方法外的变量
- 局部变量 方法中的变量
六.String字符串
- 字符串不可变,他们的值在创建之后就不能被改变
- 虽然String不可变,但是他们可以共享
- 字符串的效果相当于字符数组char ,但是底层原理是字节数据byte
- jdk8以前是字符数组,jdk9以后是字节数组
1.字符串中的常用方法
- equals()比较字符串的内容区别大小写
- charAt(int index) 返回指定索引处的 char值
- length() 返回字符串的长度
String s = "hello";
s+="world";
system.out.printIn(s);
分析 :
- 首先String s 放到占内存中
- “hello” 放到字符串常量池中 指定一个内存地址 001
- world 查询字符串常量池 没有 ,创建world放到字符串常量池 指向内存地址 002
- s+=world 就是 helloworld 查询没有 ,创建helloworld 放到字符串常量池 指向内存 003
- 最后输出的 s 就是 helloworld
ps:上面的例子 说明了 字符串不可变 但是 可以共享
StringBuilder
StringBuilder是一个可变的字符串类型
String:内容是不可变的
SrtringBuilder:内容是可变的
StringBuilder的添加和反转的方法
apend()添加数据 ,并返回对象本身 a.apend("bc") 返回 abc
reverse() 返回相反的 字符串 abc 返回 cba
String和 StringBuilder相互转换
1.StringBuilder转换为String
可以通过.toString()方法进行转换
2.Stirng转换StringBuilder
public StringBuilder(String s) 通过构造方法就可以实现把String转换成 StringBuilder
集合基础
集合是提供一种存储空间可变的存储类型,存储的数据容量可以发生改变
集合类有很多中
ArrayList<E>
- 可调整大小的数组实现
- <E>是一种特殊的数据类型,泛型
ArrayList常用方法
remove(Object o) 删除指定元素,返回删除是否成功 boolean
remove(int index) 删除指定下标的元素,返回被删除的元素
set(int index , E element) 修改指定索引处的元素 ,返回被修改的元素
get(int index) 返回指定索引的 元素
size()返回数组个数
private 关键字
是一个权限修饰符
可以修饰成员(成员变量 和 成员方法)
作用是保护成员不被别的类使用,被private修饰的成员只在本类中才能访问
private修饰的成员变量 如果想访问 需要配置get set方法
this关键字
this修饰的变量用于指代成员变量
- 方法的形参如果于成员变量同名,不带this修饰的变量指向的事形参,不是成员变量
- 方法的形参如果于成员变量同名,不带this修饰的变量指向的是成员变量
面向对象三大特征(封装,多态 ,继承)
1.继承
继承可以使子类具有父类的属性和方法,还可以在子类中重新定义 ,追加属性和 方法
public class Father{
int age = 10;
public void setAge(int age){
this.age = age;
}
}
public class Son extends Father{
@override
public void setAge(int age){
this.age = age;
}
public void setName(String name){
Log.d(name);
}
}
- 子类可以有父类的内容
- 子类还有有自己的特定内容
继承的好处和弊端
好处
- 提高了代码的复用性 (多个类相同的成员可以放到一个类中)
- 提高了代码的可维护性(如果方法的代码需要修改。修改一处就好)
弊端
继承让类和类之前产生关系,类的耦合性增强了,当父类发生变化时 ,子类也要跟着变化
super
super用法和this关键字用法相似
- this代表本类中的对象的引用
- super代表父类中对象的引用 父类存储空间的表示
重写Override
定义:方法名相同 参数列表相同 返回值相同
私有方法不能被重写 private
子类的访问权限不能更低public>默认>私有
java中是单继承 ,不支持多继承
java中支持多层继承 (Son继承Father ,Father 继承 GrandFather )
一个类只可以继承一个
修饰符
修饰符 | 同一个类中 | 同一个包中 子类无关类 | 不同包的子类 | 不同包的 无关类 |
private | ✔️ | |||
默认 | ✔️ | ✔️ | ||
protected | ✔️ | ✔️ | ✔️ | |
public | ✔️ | ✔️ | ✔️ | ✔️ |
final
final关键字的意思是最终的意思,可以用来继续是成员方法,成员变量 ,类
final修饰的特点
- 修饰方法:表示该方法是最终方法不能为重写
- 修饰变量:表示该变量是常量 ,不能再次被赋值
- 修饰类:表示该类是最终类,不能被继承
final修饰局部变量
修饰基本类型:数据值不能改变
修饰引用类型:地址值不能改变 ,地址里面的内容可以改变
static关键字
static是静的意思 ,可以用来修饰 成员变量 和 成员方法
static修饰的特点:
被类的所有对象共享 , 这也是我们判断是否使用静态关键字的条件
可以通过类名调用 ,当然,也可以通过对象名调用
static访问特点
非静态的成员方法
- 能访问静态的成员方法
- 能访问静态的成员变量
- 能访问成员方法
- 能访问成员变量
静态的成员方法
- 能访问静态的成员方法
- 能访问静态的成员变量
ps:静态的成员方法 只能访问静态的成员
多态
好处:提高了程序的扩展性
具体体现:定义方法的时候 ,使用父类型作为参数,将来在使用的时候 ,使用具体的子类型参与操作
弊端:不能使用子类的特有功能
父类引用指定子类对象
访问成员变量 ,编译看左边 运行看左边
访问成员方法 , 编译看左边 运行看右边
public class Animal {
public String name ="majunbao";
public void eat(){
System.out.println("Animal ==== eat");
}
}
public class Cat extends Animal{
public String name ="hahaha";
@Override
public void eat() {
System.out.println("cat === eat");
}
public void study(){
System.out.println("cat === study");
}
}
public class Test {
public static void main(String[] args) {
Animal animal = new Cat();
animal.eat();
System.out.println(animal.name);
}
}
输出内容
cat === eat
majunbao