黑马程序员Java零基础视频教程_上部(Java入门,含斯坦福大学练习题+力扣算

this的本质:代表方法调用者的地址值。

两个引用指向一个对象,用同一个地址值,每次赋值都会覆盖。

构造方法

两个对象的内存空间原理,新new一个对象会开辟一个新的空间。

封装和private关键字

引用和基本数据的内存。

Java内存分配。

==比的到底是谁什么?

String.charAt(int index) 获取字符串索引处的字符。字符串拼接,就是 '+' 。
String.substring(int beginindex, int endindex) 截取字符串,需要返回值接收。
String.replace(旧值,新值) 字符串中的替换,也需要返回值接收。
StringBuilder:创建之后可以变化。StringBulider.append(任意类型)添加数据,返回本身;.reverse()反转内容;.length()长度;.toString转换成String(toString的底层会new一个新的字符对象)。 (反转和拼接想到用StringBulider)。
StringJoiner:StringJoiner.add(添加的内容);.length;.toString。 new StringJoiner(间隔符,开始符,结束符)。


集合的方法:

static静态:静态只能访问静态!静态的东西都可以直接用 ’ . ‘ 直接调用。

封装:对象代表什么,就得到封装对应的数据,并提供对应的行为。

继承:
extends关键字,可以让一个类和另一个类建立起继承关系。(当类和类之间,存在相同的内容,并满足子类是父类中的一种,就可以考虑使用继承,来优化代码。)
super表示直接访问父类,this访问成员变量,不加访问局部变量,其实就是就近原则。
子类能继承父类的变量,包括加了private关键字的变量,能继承方法不能继承private方法,不能继承构造方法。
继承的子类的在被创建对象时会开辟两个空间,一个是父类的,一个是自己私有的。
多态:
只有重写方法了才能继承。

调用成员变量:编译看左边,运行看左边。
调用成员方法:编译看左边,运行看右边。
编译看左边:javac编译代码的时候,会看左边的父类中有没有这些方法/变量,有编译成功,无则失败。 (编译是运行的前提,能完成编译才能进行运行!!)
运行看右边:运行的时候实际上看的是左/右边
理解多态的创建对象:Animal a = new Dog(); a去调用方法和变量,实际上是在Animal中寻找。成员变量:子类中会继承父类的成员变量,而成员方法会重写方法,所以是继承下来的虚方法表,也就是本身的重写之后的方法。
但是创建对象的子类里面如果有私有变量,编译先看左边或者说定义的类型是父类,父类里并找不到子类私有的方法或者变量,编译就无法通过,也就谈不上运行。

抽象方法所在的类必须是抽象类 abstract,子类必须重写抽象方法。并且只能按照规定的格式。
接口: public interface name{} ,如何去对应接口: 在public class后面 写上 implements 接口名。类用接口叫做实现,这个类就是实现类,可以单实现,也可以多实现(也就是可以使用多个接口)。接口和接口之间可以有继承关系。
内部类:
成员内部类,在成员位置,属于外部类的成员。可以在外部类编写方法提供内部类对象,或者Outer.Inner oi = new Outer.new Inner();
静态内部类,只能访问外部类的静态变量或者静态方法。要访问得创建对象。
匿名内部类:

Runtime中的常用API:通过Runtime r = Runtime.getRuntime();来创建对象。

BigInteger 中的方法:new BigInteger(“一个数”)创建一个对象,括号中为字符串,能获得或者计算更大的整数。subtract减法add加法

Java中小数直接计算不准确,有些会很长超过范围会发生截断,导致数据不准确。要创建BigDecimal()对象进行精确计算,创建一个对象,括号中为字符串。

正则表达式:简化校验字符串的操作!调用String . matches(regex:“”) regex为正则表达式(String类型),写法如下:

如何在大串中寻找符合要求的小串?
Pattern p = Pattern.compile(regex“”)
Matcher m = p.matcher(str);
。默认为贪婪爬取+ * , 在后面加上?为非贪婪爬取。贪婪爬取为尽可能多的爬取。分组:组内使用是\\,组外使用是$。以左括号为准向右计算组号。

String replaceAll(String regex, String replacement)替换指定正则表达式为第二个参数。String[] split(String regex)按照正则表达式在字符串中满足的地方做切割,截取被切开的字符串放入字符数组。
m要在str中寻找满足p这个正则表达式的小串,并通过m.group()去返回满足条件的小串,一次只能找到一个,要继续得再次调用,所以用while(m.find(){sout("m.group")}进行改进.因为m.find的返回值是Boolean类型的。这个过程,就叫做爬虫!!!爬取数据。
Date类:SimpleDateFormat类:Calendar类:getInstance()获取当前时间日历对象。
JDK8以后新增的时间类:有一点规律: .now()获取现在的时间,.minus往前走 ,.plus往后,.ofXxx()获取指定时间,.with开头改变时间,is开头为判断。
计算时间间隔:例如ChronoUnit.Day.betwe(ld1,ld2),第二个减第一个的天数。

Integer常用方法:parseInt(“String”)转成int

数组的常见API:toString(arr) 转成字符串。二分法找key,binarySearch(arr, key);copyOf(arr,newlength)拷贝数组;copyOfRange(arr,from,to);

集合的进阶!:集合体系结构

Collection单列集合的接口,里面的方法有:

遍历集合的各种方法,因为双列集合无索引。
用list.iterator();获取迭代器对象(集合专用的遍历方式)。it.next();获取当前位置的元素并移动指针,it.hasNext();判断这里有没有元素。.remove();删除当前位置的元素。
增强for循环:for(元素的数据类型 变量名:数组 / 集合){} 。lambda表达式遍历:list.forEach(consumer<>接口)。
数据结构:栈(先进后出),队列(先进先出),数组(索引),链表(结点,里面存了这个地址的数据和下一个结点的地址,所以相当于链表互相绑在一起)。二叉树(度是每一个节点的子节点,二叉树度≤2,树高是数的总层数,根节点是最顶层的节点,左右子节点,根节点的左右子树),红黑树(特殊的二叉查找树,满足红黑规则即可),二叉查找树(小的存左边,大的村右边,一样的不存,四种遍历方法),平衡二叉树(在二叉查找树加一个规则,任意节点左右子树高度差不超过1)。
红黑树添加节点的规则:

泛型的使用(在类型不确定的情况下,使用泛型):泛型类,泛型方法,泛型接口。
泛型类在类名后面加上<E> ,后面的所有方法都可以在不确定的情况下用<E>作为属性值;而泛型方法是在修饰范围的关键字后面加<E>,形参也用<E>作为形参的数据类型,表示只有这个方法可以用;泛型接口实现类在实现的时候后面给上具体类型,或者实现类延续泛型,也就是写成泛型类,创建对象时确定。
泛型不能继承,但数据可以继承,当定义类或者方法,接口时类型不确定时,但是能知道以后是某个继承体系中的,可以通过泛型的通配符:?super E | | ? extends E。

单列集合:hashSet底层为数组,链表和红黑树,hashCode方法计算哈希值,是根据哈希值得出要放的位置。TreeSet: 底层为红黑树,类重写Comparator方法,创建比较方法;或者在创建对象时写匿名内部类完成实现。
