
byte short int(默认)long整型
float double(默认)浮点型
char 字符型
boolean 布尔型
char
必须单引号围起来
有且仅有一个字符
特殊字符
数据类型 变量名称 = 初始值
装数据的
里面的数据可以改变
字母,数字,下滑线,$符号组成的名称
硬性要求
推荐要求
可以强行将类型范围大的变量,数据赋值给范围小的变量进行运算
数据类型 变量 =(数据类型)变量,数据
++,–如果在变量前后使用,并且包含其他操作,赋值或者在表达式中,放在前后有明显区别
++,–单独使用无区别
扩展
+=
加后赋值
-=
减后赋值
*=
乘后赋值
/=
除后赋值
%=
取余后赋值
注意
逻辑与"&"
短路与"&&"
逻辑或"|"
短路与"||"
逻辑非"!"
逻辑异或"^"
注意
作用
格式
使用场景
Java写好的程序,可以直接调用
键盘录入开发步骤
随机数开发步骤
导包:import java.util.Random;
Random r = new Random();
int number = r.nextInt(10)
注意
括号中的范围是【0-10)包左不包右,Java中大部分的范围规则都是包左不包右
可用加减法进行范围扩展得到所需范围
object类
作用
常用方法
public String toString()
public Boolean equals(Object o)
Objects常见方法
public static boolean equals(Object a,Object b)
比较两个对象的,底层会先进性非空判断,从而可以避免空指针异常。再进行equals比较
源码
public static boolean isNull(Object obj)
StringBuilder类
是一个可变的字符串类,我们可以把它看成是一个对象容器
作用
提高字符串的操作效率,如拼接,修改
构造器
public StringBuilder()
public StringBuilder(String str)
常用方法
public StringBuilder append(任意类型)
public StringBuilder reverse()
public int length()
public String toString()
支持链式编程,例:sb1.append(“a”).append(“b”)append(“c”).reverse();
与String的区别
String
内容是不可变的,拼接字符串性能差
StringBuilder
内容可变,拼接字符串性能好,代码优雅
Math类
包含执行基本数字运算的方法,Math类没有提供公开的构造器
如何使用类中的成员
常用方法
public static int abs(int a)
public static double ceil(double a)
public static double floor(double a)
public static int round(float a)
public static int max(int a,int b)
public static double pow(double a,double b)
public static double random()
System类
System的功能是通用的,都是直接用类名调用即可,所以System不能实例化
常用方法
public static void exit(int status)
public static long currentTimeMillis()
返回当前系统的时间毫秒值形式
进行性能分析
public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数)
BigDecimal类
使用步骤
创建对象BigDecimal封装浮点型数据(最好的方式是调用方法)
常用api
public BigDecimal add(BigDecimal b)
public BigDecimal subtract(BigDecimal b)
public BigDecimal multiply(BigDecimal b)
public BigDecimal divide(BigDecimal b)
public BigDecimal divide(另一个BigDecimal对象,精确几位,舍入模式)
除法
注意
禁止使用构造方法BigDecimal(double)的方式把double值转化为BigDecimal对象
BigDecimal(double)存在精度损失风险
优先推荐入参为String的构造方法,或使用BigDecimal的valueOf方法,此方法内部其实执行了Double的toString,而Double的toString按double的实际能表达的精度对尾数进行了截断
作用
Date类
Date类的对象在Java中代表的是当前所在系统的此刻日期时间
构造器
public Date()
public Date(long time)
常用方法
public long getTime()
public void setTime(long time)
记录时间的两种形式
日期对象
时间毫秒值
SimpleDateFormat类
作用
构造器
public SimpleDateFormat()
public SimpleDateFormat(String pattern)
格式化方法
public final String format(Date date)
public final String format(Object time)
对应关系
y-年
M-月
d-日
H-时
m-分
s-秒
例
解析字符串成为日期对象
public Date parse(String source)
从给定的字符串开始解析文本以生成日期
Calendar类
if
作用:根据条件有选择的执行代码
格式
if(条件)(执行代码)
注意
if(条件1){执行代码}else{其他代码}
if(条件1){执行代码1}else if(条件2){执行代码2}…else{其他代码}
switch
switch(表达式){
case 值1:
执行代码;
break;}
case 值n-1:
执行代码;
break;}
default:
执行代码; }
表达式类型只能是byte,short,int,char,jdk5开始支持枚举,jdk7开始支持String,不支持double,float,long
case给出的值不允许重复,且只能是字面值,不能是变量
穿透性
注意别忘了分析所有情况都没有的情况放在default里
使用场景
switch分支结构
if分支结构
while
初始化语句
do-while循环
先执行再判断
注意:一定会先执行一次循环体
业务举例
for循环
用for循环求奇数和
for循环的格式
for(初始化语句:循环条件:迭代语句){循环体语句}
变为while循环
在用for循环时,控制内层循环何时需要返回值时,可以在内层循环外加信号位标记,一般信号位默认为true,当循环结束还为true时则记录该值
三种循环的差别
for和while是判断后执行;do -while是直接执行一次,再判断
for和while功能上没有任何区别,while能做的for一定能做
for的变量只能循环内部有效,while的变量从定义开始到循环体结束后还能被使用(一般在循环外定义变量)
使用关系
死循环
循环嵌套
continue关键字
break关键字
return关键字
静态初始化写法
动态初始化写法
使用场景
动态初始化
静态初始化
两种格式写法是独立的,不可以混用
基本类型
byte,short,char,int,long
float,double
boolean
引用类型
类,接口,数组(数组嵌套),String
数组名称[索引]
数组的长度属性:length
数组求和
数组元素求最大值
猜数字游戏
随机排名
定义一个动态初始化数组用于录入数据
遍历数组每个元素,每次随机一个索引值,让当前元素和该索引位置的元素进行交换
比那里输出数组元素内容即可
注意
冒泡排序
思想
步骤
注意
注意事项
形参
实参
值传递,传输的是实参存储的值(方法中改变不了相当于拷贝)(如果传输的是地址则有可能会改变地址中的值,但是地址还是不变)
基本数据类型
引用数据类型
同一个类中多个方法名称相同,形参列表不同
对于相似性业务场景:可读性好,方法名称相同提示是同一类型的功能,通过形参列表不同实现功能差异化的选择,这是一种专业的代码设计
识别技巧
重载方法中可以调用别的重载方法(例:传一个参数的可以调用传两个参数的方法,只需要给另一个参数赋值即可),减少代码量
类是共同特征的描述
对象是真实存在的具体实例
如何得到对象
拿到后能做什么
放在堆内存中
是引用类型,变量存储的是堆内存的地址
对象中,成员变量的数据放在堆内存中
注意事项
格式
类名首字母建议大写,具有意义,满足“驼峰模式”
一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。实际开发中建议还是一个文件一个class类
作用
定义格式
初始化对象格式
分类
注意
用来控制一个成员能够访问的范围
可以修饰成员变量,方法,构造器,内部类,不同权限修饰符修饰的成员能被访问的范围将受到限制
范围大小:private->缺省->protected->public
private
缺省
同一个类中
protected
同一个类中
同一个包中其他类
public
同一个类中
同一个包中其他类
不同包下的子类
要求
final关键字
是最终的意思,可修饰方法,变量,类
修饰方法:表明该方法是最终方法,不能被重写
修饰变量:表示该变量第一次赋值后不能再被赋值(有且只有一次赋值)
修饰类:表示该类是最终类,不能被继承
常量是使用public static final修饰的成员变量,必须有初始化值,而且在执行的过程中其值不可改变
好处
可以用于系统的配置信息,方便程序的维护,同时也能提高可读性
常量命名规范
执行原理
是Java的一种特殊类型
作用
格式
特征
使用场景
变量
枚举
做分类的时候
编译器会将枚举转换成常量定义,一般枚举的代码约束性好,入参值受控制,不像变量入参不受限制(例:调用方法时,传参可以写枚举中定义的名称,有效的防止代码漏洞)
某个父类知道其所有子类所要完成的某种功能,但是每个子类完成情况不一样,父类就只定义该功能的基本要求,具体由子类完成,这个类可以是一个抽象类,抽象类就是一种不完全的设计图,只给框架
必须使用abstract修饰
抽象方法
注意
特征
有得有失
为什么不能创建对象
final和abstract关系
互斥关系
abstract定义抽象类作为模板让子类继承,final定义的类不能被继承
抽象方法定义通用功能让子类重写,final定义的方法子类不能重写
模板方法建议用final
格式
特点
用法
方法
默认方法
静态方法
默认会public修饰,必须static修饰
注意
私有方法
注意
this关键字
super关键字
区别
this
this.成员变量,访问本类成员变量
this.成员方法(…)访问本类成员方法
super
super.成员变量访问父类成员变量
super.成员方法(…)访问父类成员方法
注意
封装
面向对象的三大特征之一(可以使用时尽量使用),合理隐藏,合理暴露
一般会把成员变量使用private隐藏起来
通过getter和setter方法暴露其访问
好处
继承
好处
格式
特点
子类继承父类,子类可以得到父类的属性和行为,子类可以用(可以继承父类的私有成员,但是不能直接访问)
子类能否继承父类的静态成员
子类不能继承父类的构造器,子类有自己的构造器,父类构造器用来初始化父类对象
子类所有构造器都会默认先访问父类中无参构造器,再执行自己
原因
怎么调用的
如果父类没有无参构造器会报错,需要手动书写super(…)手动调用父类的有参构造器
一个类只能继承一个直接父类
子类访问成员原则
就近原则
出现重名的成员优先使用子类的,如果一定要用父类的可以用super关键字,指定访问父类成员
Java中不支持多继承,但是支持多层继承
Java中所有类都是Object类的子类
Java中子类功能更强大
设计规范
方法重写
在继承体系中,子类出现了和父类一摸一样的方法声明,我们就称子类的方法是重写方法
应用场景
案例
@Override重写注释
注意
多态
定义
常见形式
访问特点
方法调用
变量调用
前提
类型转换
自动转换类型
从子到父
强制类型转换
从父到子
此时必须进行强制类型转换
作用
注意
如果转型后的类型和对象真实类型不是同一种类型,那么在转换时就会出现类型转换异常ClassCastException
Java建议强制类型转换前用instanceof判断当前对象的真实类型,再进行强转
变量名 instanceof 真实类型
判断关键字左边的变量指向的对象的真实类型,是否是右边的类型或者是其子类类型,是则返回true,反之
优势
在多态形势下,右边对象可以解耦合,便于扩展和维护
定义方法时使用父类型作为参数,该方法就可以接收这父类的一切子类对象,体现出多态的扩展性与便利
劣势
内部类就是定义在一个类里面的类,里面的类可以理解成(寄生),外部类可以理解成(宿主)
使用场景,作用
静态内部类
有static修饰,属于外部类本身
他的特点和使用与普通类完全一样的,类有的成分它都有,只是位置在别人里面而已
静态内部类创建对象格式
外部类名.内部类名 对象名=new 外部类名.内部类构造器;
访问扩展
使用场景
成员内部类
无static修饰,属于外部类的对象
jdk16之前,成员内部类中不能定义静态成员,jdk16开始也可以定义静态成员了
成员内部类创建对象格式
外部类.内部类 对象名=new 外部类构造器().new 内部类构造器();
访问扩展
匿名内部类
本质上是一个没有名字的局部内部类,定义在方法中,代码块中等
作用
格式
new 类|抽象类名|或者接口名(){重写方法;};
特点
也可以理解成实体类,其对象可以用于在程序中封装数据
要求
区别
类中的位置不同
初始化值不同
内存位置不同
生命周期不同
作用域
成员变量分类和访问
静态成员变量(有static修饰,属于类,加载一次可以被共享访问)
实例成员变量(无static修饰,属于对象,没对象就不加载)
什么情况定义
静态成员变量
实例成员变量
静态成员方法(有static修饰,属于类和对象共享)
类名.静态成员方法
对象.静态成员方法(不推荐)
注意
实例成员方法(无static修饰,属于对象)
对象.实例成员方法
注意
使用场景
对于一些应用程序中多次使用的功能,可以将这些功能封装成静态方法,放在一个类中,这个类就是工具类
作用
注意
为什么不用实例方法做工具类
是类的5大成分之一(成员变量,构造器,方法,代码块,内部类),定义在类中方法外
在Java类下,使用{}括起来的代码被称为代码块
分类
静态代码块
构造代码块
单例模式
可以保证系统中,应用该模式的类永远只有一个实例,即一个类永远只能创建一个对象
场景和作用
饿汉单例模式
在类获取对象的时候,对象已经提前创建好了,直接调用就行了不用再new
设计步骤
懒汉单例设计模式
在真正需要该对象的时候,采取创建一个对象(延迟加载对象)
设计步骤
区别
直接定义:String name =”java";推荐使用
通过String类的构造器创建对象
面试题
两种方式有什么区别
String s2 =new String(“abc”);//此时不仅在字符串常量池中创建字符,也在堆内存中创建字符串对象,但是s2是引用类型存的是数据地址,String s1=“abc”;//这里不在字符串常量池创建字符System.out.println(s1==s2)//false
java存在编译优化机制,程序在编译时:“a”+“b”+“c"会直接转成"abc”
验证码
手机号屏蔽
敏感词替换
集合的一种支持索引
对象获取
集合添加元素
如何创建对象添加元素
泛型概念
ArrayList就是泛型类,可在编译阶段约束集合对象只能操作某种数据类型
ArrayList list=new ArrayList<>();从jdk1.7开始泛型后面的类型声明可以不写
集合中只能存储引用类型,不支持基本数据类型
要求:使用泛型,即使集合要接所有数据类型也要写Object
常用方法
注意