语言基础:
java开发环境:
JVM:java虚拟机
JRE:java运行环境
JDK:java开发工具包
基本变量类型:
类型 | 名称 | 大小 | 取值范围 | |
byte | 字节 | 1字节 | 127~-128 | |
short | 短整型 | 2字节 | -2^15~ 2^15-1 | |
int | 整型 | 4字节 | -2^31 ~2^31-1 | 整型默认类型 |
long | 长整型 | 8字节 | -2^63 ~2^63-1 | |
float | 单精度浮点型 | 4字节 | ||
double | 双精度浮点型 | 8字节 | 小数默认类型 | |
char | 字符型 | 2字节 | 65535 | |
boolean | 布尔型 | 1字节 | true或false |
基本类型由小到大依次为:
byte----short----int----long----float----double
char----
类型之间的转换:
自动转换:小类型到大类型
强制转换:大类型到小类型
运算符:
算数运算符:
+,-,*,/,%(取余),++/--(自增或自减)
关系运算符:
>,<,>=,<=,==(等于),!=(不等于)
逻辑运算符:
&&(与),||(或),!(非)
赋值运算符:
=,+=,-=,*=,/=,%=
分支结构:
if(boolean){ 语句块 }
if(boolean){ 语句块 }else{ 语句块 }
switch( )case
break:跳出循环
continue:跳过循环体中剩余语句而进入下一次循环
循环结构:
循环三要素:
- 循环变量的初始化
- 循环的条件(以循环变量为基础)
- 循环变量的改变(向着循环的结束变)
for( ; ; ;){ 循环体 }
do(boolean){ 循环体 }while(boolean)
先执行再判断 while(boolean){ 循环体 }
先判断在执行
数组:
属于引用类型,相同数据类型元素的集合
通过下标来访问数组中的元素
下标从零开始,最大到(数组长度-1)
用for循环来遍历数组元素
方法:
定义方法:五要素
修饰词 返回值类型 方法名(参数列表) {
方法体
}
方法的调用:
无返回值:方法名(有参传参);
有返回值:数据类型 变量 = 方法名(有参传参);
面向对象:
类: 包含对象属性/特征(成员变量,数组和类是引用数据类型
对象: 对象的行为/动作(方法)
方法的重载: 同类中,方法名相同,参数列表不同,与返回值类型,参数名称无关
1.构造方法: 多次使用给成员变量赋初始值,与类同名。没有返回值类型(void)都没有,要不要参数取决于数据能不能写死,不能写死就需要传参数,在创建(new)时自动调用,自己不写构造方法,会默认提供一个无参构造,写了则不提供。可以重载
2.this:指当前对象,那个对象调用方法就指那个对象,只能在方法中使用 -this.成员变量名(访问成员变量),成员变量与局部变量同名时,若想访问成员变量则this不能省略
3.内存管理:
堆:new出来的对象/成员变量
栈:局部变量/方法的参数 数组对象存储与堆中(当作成员变量)
方法区:存储.class字节码文件(包括方法、静态变量)方法只有一份,通过this来区分调用对象
引用数据类型:与基本数据类型相比,给数组元素赋值必须new一下,访问对象数据必须通过数组元素打点
继承:实现代码复用,通过extends来实现,有超类(父类)和派生类(子类),超类中所包含共有的属性和行为,派生类则是特有的属性和行为,同时派生类既能访问自己,也能访问超类,但是超类不能访问派生类,一个超类可以有多个派生类,但一个派生类只能有一个超类(单一继承原则)继承同时具有传递性。 -构造派生类前先构造超类 ,在派生类的构造方法中没有调用超累的构造方法,默认super()调用超累的无参构造方法,若自己调用了超类的构造方法,即不再提供 -super()调用超类构造方法,必须在派生类构造方法的第一行
super:当前对象的超类对象,
super.成员变量名----访问超类的成员变量
super.方法名()---------调用超类方法
super()--------------------调用超类的构造方法
向上造型:指的是超类型引用指向派生类的对象,后面能点出来什么需要看引用的类型 实现代码复用,当多种角色做的一样的事情,可以将多种角色造型到超类数组中,统一访问
方法的重写:发生在超类和派生类中,方法名相同,参数列表相同,且重写方法被调用时,看对象的类型,遵循两同两小一大,一大指的是派生类方法的访问权限大于或等于超类方法的
package:声明包
import:导入类
访问控制修饰符:--------------------------保证数据的安全
public:公开的,任何类
private:私有的,本类
protected:受保护的,本类、派生类、同包类
默认的:什么也不写,本类、同包类
访问修饰 符作用范围由大到小排列是:
public > protected > default > private
final:最终的、不可改变的------------单独应用几率极低
修饰变量:变量不能被改变
修饰方法:方法不能被重写
修饰类:类不能被继承
static:静态变量:
由static修饰属于类,存储在方法区中,只有一份常常通过类名点来访问何时用:所有对象所共享的数据(图片、音频、视频等)
静态方法:
由static修饰属于类,存储在方法区中,只有一份常常通过类名点来访问静态方法中没有隐式this传递,不能直接访问实例成员,方法的操作与对象无关
静态块:
由static修饰属于类,在类被加载期间自动执行,一个类只被加载一次,所以静态块只执行一次何时用:加载/初始化静态资源(图片、音频、视频等)
static final常量:必须声明同时初始化类名点来访问,不能被改变,常量名所有字母都大写,多个单词用_分隔编译器在编译时会将常量直接替换为具体的数,效率高,数据永远不变,并且经常使用
抽象方法:
由abstract修饰只有方法的定义,没有具体的实现(连{}都没有)
抽象类:
由abstract修饰包含抽象方法的类必须是抽象类抽象类不能被实例化(new对象)抽象类是需要被继承的,派生类: 重写所有抽象方法-----------------变不完整为完整也声明为抽象类
抽象类的意义:
封装共有的属性和行为---------------代码复用为所有派生类提供统一的类型------向上造型可以包含抽象方法,为所有派生类提供统一的入口(能点出来), 派生类的行为不同,但入口是一致的,同时相当于定义了一个标准(强制重写)
成员内部类:
类中套类,外面的称为外部类,里面的称为内部类内部类通常只服务于外部类,对外不具备可见性内部类对象通常在外部类中创建内部类中可以直接访问外部类的成员(包括私有的) 内部类中有个隐式的引用指向了创建它的外部类对象:外部类名.this
匿名内部类:简化代码,若想创建一个类(派生类)的对象,并且对象只被创建一次,可以做成匿名内部类在匿名内部类中默认外面的变量为final的
隐式的引用:
this:指代当前对象
super:指代当前对象的超类对象外部类名.
this:指代当前对象的外部类对象
接口:
是一种引用数据类型由interface定义只能包含常量和抽象方法接口不能被实例化(new对象)接口是需要被实现/继承的。
实现类/派生类:----必须重写所有抽象方法一个类可以实现多个接口,用逗号分隔,若又继承又实现时,应先继承后实现接口可以继承接口
接口和类之间的关系:
类和类---------------------继承extends
接口和接口---------------继承extends
类和接口------------------实现implements
多态:
同一类型的引用指向不同的对象时,有不同的实现--------所有抽象方法都是多态的----行为的多态(通过方法的重写实现的):cut()、getImage()、move()…
同一个对象被造型为不同的类型时,有不同的功能--------所有对象都是多态的(通过向上造型来实现)
向上造型、强制类型转换、instanceof判断
内存管理:由JVM来管理的
堆:存储new出来的对象(包括实例变量)
栈:存储正在调用的方法中的局部变量(包括方法的参数)
方法区:存储.class字节码文件(包括静态变量、所有方法)方法只有一份,通过this来区分具体的访问对象
String:字符串类型
java.lang.String使用final修饰,不能被继承java中的String在内存中采用Unicode编码方式,任何一个字符占用两个字节的编码字符串底层封装的是一个字符数组字符串一旦创建,对象内容永远无法改变,但字符串引用可以重新赋值------不变对象 。
常量池:
java对字符串有一个优化措施:字符串常量池(堆中)java推荐我们使用字面量/直接量的方式来创建字符串,并且会缓存所有以字面量形式创建的字符串对象到常量池中,当使用相同字面量再创建对象时将复用常量池中的对象以减少内存开销,从而避免内存中堆积大量内容相同的字符串对象。
API基础:
String常用方法:
length():获取字符串的长度(字符个数)
trim():去除当前字符串两边的空白字符
toUpperCase()和toLowerCase():将当前字符串中的英文部分转为全大写/全小写
startsWith()和endsWith():判断当前字符串是否是以给定的字符串开始/结尾的
charAt():返回当前字符串指定位置上的字符------------------根据下标找字符
indexOf()和lastIndexOf():检索给定字符串在当前字符串中的开始位置-------根据字符串找位置substring():截取当前字符串中指定范围内的字符串String的静态方法
valueOf():将其它数据类型转换为String
StringBuilder类:
由于String是不变对象,每次修改内容要创建新对象,因此String不适合做频繁修改操作,为了解决这个问题,java提供了StringBuilder类。StringBuilder是专门用于修改字符串的一个API,内部维护一个可变的char数组,修改都是在这个数组上进行的,修改速度、性能优秀,并且提供了修改字符串的常见的方法:增、删、改、插
StringBuilder常用方法:
append():追加内容
replace():替换部分内容
delete():删除部分内容
insert():插入内容
reverse():翻转内容
正则表达式:正则表达式是用来描述字符串内容格式,使用它通常用来匹配一个字符串的内容是否符合要求
String支持与正则表达式的方法:
matches():使用给定的正则表达式验证当前字符串的格式是否符合要求
split():将当前字符串按照满足正则表达式的部分进行拆分
replaceAll():将当前字符串中满足正则表达式的部分替换为给定的字符串
Objetc:对象:
1.调用toString()时默认返回: 类的全称@地址。
2.调用equals()时默认比较的还是==(即比较地址),常常重写equals()来比较具体的属性值
java的类(String)已经重写equals()了,但我们自己定义的类必须自己重写equals()
派生类重写equals()的基本规则:
1)两个对象必须是同一个类型,若类型不同则返回false
2)若参数对象为null,则返回false
3)原则上两个对象要比较对象的属性是否是相同
二进制:
二进制规则:
逢二进一的计数规则。
Java 所有的变量\常量存储的都是2进制数!
进制间的转换需看权数