位运算:
System.out.println(5<<2); //20左移:左边去掉两位,右边补2个0
System.out.println(5>>2); //1 右移:右边去掉两位,左边补2个0
//练习:
int a = 8;
System.out.println(a>>2); //2
System.out.println(a<<2); //32
System.out.println(3&6); //2 位与运算:位数对齐,全1才为1
System.out.println(3|6); //7 位或运算:位数对齐,全0才为0
System.out.println(3^6); //5 位异或运算:位数对齐,相同为0,不同为1
进制转换
二进制 :0b开头,0b0001
八进制 :0开头, 00001
十六进制 :0x开头,0x
技能点:将其他进制转换为10进制
公式:N进制转10进制:从右到左,N^0*数值+N^1*数值+..+N*(最高位)*数值
练习:0b111,0123, 0x1ef这些结果分别是多少?
7 83 15+14*16+256=495
技能点:将10进制转换为其他进制
公式:转为N进制,十进制数一直整除N直到商为0,余数从下往上排列
练习:50---八进制:062十六进制:0x32 0b110010
循环
三种循环的应用场景:
for: 循环次数可预见
while:循环次数不可预见
do.while: 循环次数不可预见; 至少处理一次
跳出:
continue; //跳出当次循环,不影响下一次循环的执行
break; //跳出循环
return:跳出方法
加标签(outer:)可以跳出标签所在外层循环, out:for(){ break out;
continue out;}
递归的条件:
1.具有递归的规律性
2.要有递归的出口
3.递归n值过大,会引起栈溢出,StackOverflowError
(尾递归:jdk1.8实现)
数组
(1)数组是用来存储一组相同数据类型的数据结构。
数组中的元素可以是任何数据类型(基本类型和引用类型)。
数组变量属于引用数据类型
String[] names = new String[3]; //创建一个存3个元素的String类型的数组
异常:java.lang.ArrayIndexOutOfBoundsException,NullPointException
(2)可变参数//int...a
public static int add(int...a){ //本质是数组
int sum = 0; for(int i=0;i
return sum;}
查找
二分查找法在数组中的应用: (二分查找前提: 数组元素已排好序)
定义一个数组: 1,4,7,12;在数组中查找7,找到则返回下标
作用: 比一般查找法效率要高,因为取一半进行比较;不需要一个一个元素比
分析: 通过下标取半
排序
冒泡排序:从左往右,相邻两数相比较,大的放右边,依次类推,比较n-1次 ,时间: o(n*2)
选择排序:第一个和后面所有比较,最小的放第一个,依次类推,时间: o(n*2)
插入排序:
面向对象
基本语法:Java最基本的单位是类,具体化-对象,对象的基本信息--属性,
对象的行为-方法
封装
属性不能直接被外部调用--限制权限private
通过方法进行封装---set/get
成员变量 VS 局部变量
成员变量:
1、成员变量定义在类中,在整个类中都可以被访问。
2、成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。
3、成员变量有默认初始化值。
局部变量:
1、局部变量只定义在局部范围内,只在所属的区域有效。
2、局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。
3、局部变量没有默认初始化值
使用变量需要遵循的原则为:就近原则,首先在局部范围找,有就使用;接着在成员位置找。
static修饰的变量称为静态变量(类变量,被所有对象共享)
继承
面向对象的第二大特性
特性: 子类继承了父类,则可使用父类的属性和方法
构造方法是否具有继承性?不具有
继承,私有的方法和变量会不会被继承?不会
Object: 是面向对象中类的老祖宗,不写继承默认就有
分析打印流程:
只要是打印对象,如果当前类没有重写,则调用的是父类的toString方法:包名@hash值
super、this
super.xxx来引用父类的成员或方法
super(); //默认有调用父类的构造方法
this()--调当前类构造方法,形参与成员名字重名,用this来区分
equals
*1. “==”: 两个字符串对象用等号,比较的是对象的地址
*2. equals: 在OBj类的对象的equals方法,比较的是地址;
* String类重写的方法,则比较的是内容
final
1. final修饰属性:
final修饰的属性必须初始化,不能改变final修饰的属性的值
应用常用: static final 定义状态值是绝配
public static final int HTTP_OK = 1;
2. final修饰类:(太监类)
3. final修饰方法:父类的方法不能重写
static
1.Static修饰属性: 静态成员属性 VS 成员属性
成员属性: 每个对象独享一份成员属性调用:this.属性
静态成员属性: 每个对象共享一份成员属性调用:类名.属性
2.Static修饰代码块: 静态代码块 VS 代码块
代码块: 每个对象都会初始执行一次代码块
静态代码块:无论有多少个对象只加载一次静态代码块
3.Static修饰方法: 静态方法 VS 成员方法
成员方法: 成员方法属于对象,调用方式:对象.方法
静态方法: 属于类,调用方式:类.方法(强烈推荐)
结论:只要加了static修饰的方法、代码块、属性;都不属于对象,属于类;
他的应用不依赖对象,且在对象之前就已经出现
问题: 1. 在成员方法中能否使用静态变量?可以
2. 在静态方法中能否使用成员变量?不可以
3. 在静态方法中能否调用成员方法?不可以
4. 为什么在main方法中加static?共享特性
应用场景: 1.修饰属性: 用作状态值的判断
2.修饰代码块: 当程序的某个功能只需初始化一次
3.修饰方法: 充当工具类
多态(实现控制反转)
多态,是面向对象的程序设计语言最核心的特征。意味着一个对象有着多重特
征,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。
继承:父类对象指向子类对象,可以调用子类重写的方法
接口:接口类对象调用实现类对象,可以调用实现类重写的方法