【java】Java基础学习总结(b站黑马程序员课程)

   日期:2024-12-26    作者:hnaa1688 移动:http://oml01z.riyuangf.com/mobile/quote/42338.html

Mark-boker/JavaBasic (github.com)自身学习代码(详细代码请关注黑马程序员领取

【java】Java基础学习总结(b站黑马程序员课程)

深入理解 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.克隆

  1. 首先实体类需要实现Cloneable接口
  2. 重写clone方法,将protected改为public,将返回类型改为当前实体类的类型
  3. 如果实体类中的属性不全是基础数据类型和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博客


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号