Mark-boker/JavaBasic (github.com)自身学习代码(详细代码请关注黑马程序员领取)
深入理解 Java 实例化_实例化是什么意思_南淮北安的博客-CSDN博客
实例化的特点 1.简单地说,实例化就是new对象。 2.new的过程就是实例化的过程,如 new Cat();就是对Cat类的实例化(在堆内存的开辟空间进行记录)。 3.实例化对象的语法:类名 引用变量名(通常记录在堆内存的开辟的地址) = new 构造器名() ; 4.访问成员属性或成员方法一般语法是:引用成员变量名.成员名 Student st;表示在栈中声明了一个名为st的引用变量 new Student();表示对学生类进行了实例化,即在堆中新建了一个对象,并调用构造方法进行初始化。 括号中之所以有参数,是因为构造方法有参,写进的参数将传递给构造方法中的形参。 如果想括号里无参,那么将无参构造也写上。因为如果没写构造器,那么编译器会默认创建一个无参。 倘若写了有参,编译器就不再默认创建无参了,需手动添加。 构造方法是一个比较特殊的方法,通过构造方法可以完成对象的创建,以及实例变量的初始化。换句话说:构造方法是用来创建对象,并且同时给对象的属性赋值。注意:实例变量没有手动赋值的时候,系统会赋默认值。成员变量和方法需要对象去调用
java是一门面向对象的语言,而面向对象的原则,就是要隐藏细节,把该封装的东西封装到一个合适的类里面, 一个合格的封装类,一般情况下它不会让你去直接访问他的属性(成员变量),而是让你去调用他的方法set和get。 比如获取或者修改密码时候需要验证,就可以在set方法里添加验证代码,看看密码是否符合修改规范 ptg插件可以自动补全javabean类
jdk和jre的区别? - 知乎 (zhihu.com)
StringBuilder可以非常有效率去进行对字符串处理(创建的内容是可变的,方便字符串拼接和反转), 大量普通字符串拼接会产生许多无用的字符串影响效率 StringBuilder(初始容量16,扩容2*16+2,不够就为实际容量)是java在底层做了处理,打印的对象不是地址属性值,toString返回类名和引用地址, toString将StringBuffer转换成String
Java中String类的值在创建后不能修改
第二次的a会在方法区的字符串常量池中重新分配一个内存存放“Hello World”,并存放其内 存地址中的Hello不会发生任何变化。
java集合超详解_java集合使用-CSDN博客
注意事项
static静态方法,静态变量随着类加载而加载,优先于对象,运行代码对象还没在堆内存开辟空间 ,静态变量会在堆中单独创建一个静态区(地址和new出来的对象地址不一样),是类中全体对象共享的
static静态方法没有this关键字,静态方法只能访问静态(不属于对象,是属于类的,随着类加载而加载,提前初始化),非静态方法(对象有关,需要实例化)可以访问所有
静态方法不能调用非静态变量(因为还没new实例出来,逻辑顺序,如果静态方法里面有非静态方法或者变量,它无法识别,因为没有new实例化,非静态方法变量不存在堆内存中)
java静态代码块、静态变量、普通代码块和构造方法执行顺序-CSDN博客
当类与类之间,存在相同共性的内容,并且满足子类是父类一种(逻辑),就考虑继承优化代码 java支持单继承(1子只能继承1父),不支持多继承,支持多层继承,没有继承的类默认继承Object类
构造方法不能被继承(构造方法名字必须和类一样)
继承和调用是两种概念,私有父类成员变量可以继承,但是不能调用(赋值),例如上图无法赋值“钢门吹雪”,调用z.name
非私有的成员方法(虚方法)可以继承和调用(虚方法表),私有的不能继承
继承的一些特点和性质及方法重写
方法重写要注意的事项: 1.方法重写时, 方法名与形参列表必须一致。 2.方法重写时,子类的权限修饰符必须要大于或者等于父类的权限修饰符。 3.方法重写时,子类的返回值类型必须要小于或者等于父类的返回值类型。 4.方法重写时, 子类抛出的异常类型要小于或者等于父类抛出的异常类型。 Exception(最坏) RuntimeException(小坏) 5.建议重写方法尽量和父类保持一致 6.只有被添加到虚方法表中的方法才能被重写(java中静态字段和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏,直接调用是子类静态方法)
多态的前提条件是: (1)有继承/实现关系。 (2)有方法的重写。 (3)有父类引用指向之类对象。(Fu f =new Zi())
java中多态的作用,多态的好处,以及为什么要用多态?_java为什么用多态_打代码的汤姆猫的博客-CSDN博客
编译时查看父类有没有相应的成员变量如果有编译成功,运行时也查看父类有没有相应的成员变量如果有调用成功
编译时查看父类有没有相应的成员方法如果有编译成功(所以子类特有方法父类没有,编译是失败的),运行时也查看子类有没有相应的成员方法如果有调用成功
java的动态绑定与静态绑定(彻底理解多态与重载)-CSDN博客
细究一下Java的动态绑定机制(非常重要)_java动态绑定机制-CSDN博客
java多态和instanceof的理解与使用_多态不用a instanceof 有什么区别_编程怪的博客-CSDN博客
49 向上造型与向下造型 - Scorpicat - 博客园 (cnblogs.com)
向上造型(转型)
定义:超类的引用指向子类对象。
例如:
1
以上即为向上转型。
特性:
- 向上转型后的引用只能使用超类中的方法和属性。
- 向上转型后的引用不能使用派生类中自有的方法和属性,可以使用重写父类的方法
向下造型(转型)
将一个已经向上转型的引用强制向下转型,并用一个新的派生类引用接收。
注意:
- 向下转型后的引用既可以使用超类中的也可以使用它自己的类(当前派生类)中的方法和属性。
- 向下转型后需要使用一个派生类引用来接收。
- 如果派生类重写超类方法,派生类虚方法表中该方法会被覆盖,调取的是派生类重写后的方法
以上面的代码为前提,向下转型:
1
2
3
4
5
详细看连接
静态代码块:执行优先级高于非静态的初始化块,它会在类初始化的时候执行一次,执行完成便销毁,它仅能初始化类变量,即static修饰的数据成员。静态代码块写法,static{ }
静态代码块的执行顺序:静态代码块----->非静态代码块-------->构造函数
适配器
实现类需要继承就让中间类继承父类,实现类就可以间接继承了
匿名内部类
后面还有Lambda 表达式去简化匿名内部类
Java统计代码的执行时间的6种方法_java执行时间_YouluBank的博客-CSDN博客
1.Object
jdk的本身附带一些标准类库重写Object中toString方法,所以创建的一些对象和集合直接可以输出内容而不是地址值,一些对象也会隐藏toString方法(看源码)
2.克隆
- 首先实体类需要实现Cloneable接口
- 重写clone方法,将protected改为public,将返回类型改为当前实体类的类型
- 如果实体类中的属性不全是基础数据类型和String,那么对该属性类也要进行同样的操作让它支持深克隆
any-rule插件可以快速生成所需要的正则表达式
爬虫和正则表达式结合爬取筛选出有用内容
Java基础之int和Integer有什么区别_一枚-狗子的博客-CSDN博客
【详解】JAVA集合只能存放引用类型的的数据,不能存放基本数据类型_集合只能存储引用数据类型_糖醋小熊猫的博客-CSDN博客
Iterator和ListIterator之间有什么区别?_xiangyuenacha的博客-CSDN博客
简述ArrayList集合和数组的区别?_紫乾2014的博客-CSDN博客
集合进阶07-LinkedList和迭代器的源码分析_哔哩哔哩_bilibili
双向链表源码
节点格式 节点头地址值(记录上一个节点地址) 元素 节点尾地址值(记录下一个节点地址)
创建新节点首先把上一个节点(last尾节点)地址值赋值给l,l作为下一个节点的头地址值(记录上一个节点地址),e为添加元素,null为尾地址值,再把本节点地址值赋值给last做为尾节点,再判断把本节点地址值赋值给上一节点l.next(上一节点尾地址值)做连接
Java 泛型 | 菜鸟教程 (runoob.com)
平衡二叉树的左旋右旋详解 看不懂你打我_You Y.G.的博客-CSDN博客
集合进阶-11数据结构(平衡二叉树旋转机制)_哔哩哔哩_bilibili
红黑树
集合进阶-12-数据结构(红黑树、红黑规则、添加节点处理方案详解)_哔哩哔哩_bilibili
旋转比较消耗性能,单纯修改颜色的增删查改效率会更高
集合进阶-13-HashSet、LinkedHashSet详解_哔哩哔哩_bilibili
如果没有重写,自动哈希计算的是引用变量地址值,因为对象地址值不同,所以计算出的值是不同的,而重写后就可以计算对象内的属性值
硬核问题,为什么重写equals()就要重写hashCode()? - 知乎 (zhihu.com)
fn+alt+insert键快捷可以自动重写hashCode方法
自定义排序同时创建使用方式二优先
compareTo方法返回
为什么返回值为 0 ,只是存取一个元素,返回 -1 就会倒序存储,返回 1 就会怎么存怎么取呢?
因为TreeSet 底层是一个二叉树(红黑树就是二叉树的升级版嘛),没插入一个元素就会调用 comapreTo() 方法做比较,就会按照我们上面提到的插入规则来
返回值如果写死 0,认为是相同的元素,所以 TreeSet 中不用插入新元素,用原来的即可
返回值如果写死 1,认为是大的元素,所以会插入到已有元素的右边,读取的时候,就是正序排列的
返回值如果写死 -1,认为是小的元素,所以会插入到已有元素的左边,读取的时候,就是倒序排列的
使用TreeSet,关于重写compareTo()方法 升序降序问题(适合Java小白)_重写compareto方法排序原理_张小三lc的博客-CSDN博客