static关键字
1、修饰类中的值被所有共享的成员属性。共性。
2、修饰成员函数,成员属性都是用static修饰的或者是静态的,就可以用static修饰。就是说,不可以访问个性的属性。
3、不可以修饰外部类,可以修饰内部类。
static只访问同一个内存,一改全改。
4、修饰代码块(无名函数)
只执行一次:场景,取钱只可以取一次。
和new的个数和位置有关系。
代码块,路过就执行。
加了static代码块,只会执行一次且先执行。虚拟机第一次加载时。
加载=读取
JVM加载类---------JVM第一次 读取 类-----JVM第一次创建类对象-------new 构造函数。
只执行一次,且先执行。
思考题:
在主函数中,调用和主函数同种类型的函数时,函数前要加static。
== 地址
equals比较内容
this关键字
static 初始化没赋值,则不分配代码块。
this 针对变量,super针对的是方法
子类调用父类的变量/方法
子类成员变量隐藏父类成员变量
子类成员方法覆盖(重写)父类成员方法
this 关键字的用法:
加载=阅读
1、调用成员属性 this.成员属性 = 值,更好的区分重名的局部变量。
局部变量和成员属性重名,成员属性失效。
2、调用成员函数
万能引用,万能的对象名,当前类的当前的一个对象,JVM当前正在加载的类。
谁调用,他就是谁。st2.run()。进入run以后,run中的this就是st2
this就是个存地址的东西,
让this指向此对象。
3、调用构造函数
构造函数可以重载
按照下面的规章制度来。
this()调用本类其他构造函数,必须在本类构造函数的第一条语句(原因)
重载(所有函数)
成员函数,构造函数
1、同一个类中。
2、函数名相同
3、形参列表不同,形参顺序不同,形参个数不同。
请简述overlord和override?
overload和static是否有关?
overload与返回值类型是否有关?----返回值类型为基本数据类型?引用数据类型?有继承关系的数据类型。
overload与形参的继承关系是否有关。
overload与访问权限修饰符是否有关。
overload与函数抛出异常是否有关。
重载123,两同一不同
重写
重载是以传入的变量不同来区分执行的方法的,方法名是相同的;
重写是覆盖
父类的final和static不能被覆盖
子类必须覆盖父类声明为abstract方法,或者子类也是abstract方法
抽象类不能被实例化,也就是不能用new来创建对象
抽象类一定是用来继承的,声明的具体类一定不是用来继承的。
抽象方法不能用static或者private修饰
包含抽象方法的类必须声明为抽象类。
final类不能被继承,不能有子类
java接口只有方法的特征,没有方法的实现。--接口中的方法都是抽象方法。interface
接口是对类的行为的不同表示抽象出来的
数组:
数组排序:Array.sort(s)
数组比较:Array.compare(a1,a2)
搜索数组:int i = binarySearch(a,"anc")//a 是数组,abc是查找内容
字符串:
标准语法构造字符串:
String str = new String("123");
String str = "123";
在内存并非相同。
简化语法创建的字符串 StringPool是一整块,可以用==比较,因为地址相同。
new是开辟内存的,因此地址必然不同。
new String (charArray) 构造一个字符串,数组字符之拼接
equals(str)方法判断值是否相等
==判断的是地址是不是一个。
s1.replace(s1,s2),生成了一个新的对象 ,也就是new 了一个新的对象放在了Stringpool外面。
字符串没有remove也没有delete
字符创,在创建其对象后,内容不可变。每次改编后,都意味着生成了新的字符串对象。
字符串常用函数:
charAt(int index) return char ; char ch = s1.charAt(1); index = s1.length()-1
int index = s1.indexOf("str") 模糊查询 字串的第一个位置
intern
equalsIgnoreCase(other)方法判断内容是否相等,忽略了大小写;
startsWith(str),endsWith 判断是否指定内容开始或结束
str.length()
str.toLowerCase()
str.toUpperCase()
字符串查找:
str.indexOf(ch)第一次,没有则-1
str.lastIndexOf(ch)最后一次,没有则-1
字符串截取:
str.substring(0,6)
.replace()替换
.trim()去掉两端空格
.split("!|。")字符串分割
格式化字符串:
("%+d",15) --- 添加加号 +15
("%-5d",15)左对齐
("%04d",15) 前面添0
("% 4d",15) 前面添空格
("%,f",9999),以逗号分组,千进制
格式化日期:
%tc date 全部日期
%tF 年-月-日
%tD 年/月/日
%tr 12小时制
%tT 24小时制
%tR 24小时制 只显示12:45
都是%t开始的格式字符串。
append()
delete(kaishi,jieshu)
deleteCharAt(int)
insert(int,arg)
.length()
正则表达式:python有
集合类:
List和set继承collection接口
collection包括了数组,集合,map
1、collection接口的常用方法:
addAll()方法:
List2.addAll(List1)
removeAll()方法:
指定集合中移除包含在另一个集合中的元素,返回值是True 或者 False
List1.removeAll(List2)
retainAll()方法:
和removeAll方法相反,留下另一个集合中的元素
需要遍历集合迭代器。
containAll方法:
集合中是否包含另外一个集合。Boolean类型
toArray()方法:
将一个集合变为数组。
2、List 集合
ArrayList
LinkedList
除了collection的方法外,还有,其他方法
其他方法均与索引有关。
add(位置,对象)
addAll(位置,整个集合)
remove(位置)
set(位置,新对象)
get(位置)
indexOf(获取最小索引)
lastIndexOf(对象)最大索引
subList(开始,结束)截取新数组
3、set集合
set中,无重复,无序,并非完全无序
除了collection方法,还有:
HashSet类,需要重新实现equals方法,确保唯一性
TreeSet类,略
4、Map类
键值对
put(key,value)
containsValue(key或者value) boolean
get(key) null
keySet() 集合
values() 返回所有value值的collection集合
HashMap
TreeMap(有顺序)
异常处理机制:
error类 一般比较严重,程序调试改不过来
exception类,调试程序可以改过来
java的IO机制:
io实现了数据的保存。
暂时空着
java的多线程技术:
public Thread();
public Thread(String threadName);
继承Thread方法后,需要重写该类的run()方法。
使用线程名.start()开启该run()线程。
线程在同一时间只会运行一个,使用setPriority()方法确定其优先级,1~10,默认为5,数值越大优先级越高
super.toString()父类的toString方法。
线程的挂起:
sleep()方法,毫秒计算
join()方法,一个线程在另一个线程调用t.join(),t执行完成后,这个线程才会执行。
wait()方法,线程到了notify()或者notifyAll()方法才会执行。或者wait(int 毫秒) 作用等价于sleep()
等待某个输入或者输出的完成。
run()结束 或者stop()方法,线程会死亡。
线程安全
使用synchronized关键字,实现线程的同步
死锁四个条件:
互斥,线程使用的资源至少一个是不能共享的
请求与保持:至少有一个线程必须持有一个资源且正在等待获取一个当前被其他线程持有的资源
非剥夺条件:分匹配的资源不能从相应的线程中被强制剥夺
循环等待:第一个线程等待其他线程,后者又在等待第一个
枚举与泛型:
泛型类在SpringBoot中使用到很多的Map<string,object>类,键值对的形式,键是string类型,值是object类型
参数传递:
当有两个函数m,n。函数n想用到m中的局部变量。以主函数作为参考系,找谁是主调谁是被调。
实参和形参都有自己的内存。
参数是单向的由实参到形参的传递
构造函数
回到cust()类,static类不和main主函数并列,static直接删掉即可。
间接调用。不在本类,用其他类的对象.成员属性和成员函数调用
构造函数,为了最大程度保障对象属性初始化。
构造函数的特征:1234
1、构造函数没有返回值类型,即没有void------------init
2、构造函数与当前类名完全一样。
3、构造函数 不是 成员函数 ,是特殊的函数,只负责为对象的属性进行初始化赋值。
成员函数用来发出对象的动作,构造函数是用来初始化的。
成员函数,对象名.的语法调用。getmoney
构造函数只能在new关键词后调用。语法为 new 构造函数名(实参列表)。
4、dos界面下
javac + 文件名 编译
java +类名执行
反编译 javap
当没有为一个类显示的定义一个有参的构造函数时,jvm会自动为每一个类分配一个无参的方法体为空的构造函数。
当为一个类显示的定义了一个有参的构造函数时,JVM不在自动分配无参的构造函数(可以自己在写)
因此,任何一个类都有构造函数
第三条即可修改之:
对象名 = new 构造函数,同时为对象的属性进行了初始化的赋值。
构造函数的作用--以及内存图
new关键字+构造函数,就是创建对象的语法。
new 内存分配运算符。分配 成员属性:包括了成员属性和成员函数。
1、 为类的对象的属性,进行初始化赋值。
2、分配
基本数据类型,引用数据类型。
引用数据类型。
左边st是对象名;
右边是对象。
几个new就是几个对象。
匿名对象
只有new+构造函数才叫对象。