来了来了,100条必背JAVA知识点(下)
wptr33 2025-07-01 23:41 78 浏览
接着前50条来分享,今天的部分涉及更多的代码,全文都是干货,建议收藏后观看。
51.重写的规则:
①子类重写的方法的方法名和形参列表与父类被重写的方法的方法名和形参列表相同。
②子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符
特殊情况:子类不能重写父类中声明为private权限的方法。
③返回值类型:
父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型只能是void。
父类被重写的方法的返回值类型是A类型,则子类重写的方法的返回值类型可以是A类或A类的子类。
父类被重写的方法的返回值类型是基本数据类型(比如:double),则子类重写的方法的返回值类型必须是相同的基本数据类型(必须也是double)。
④子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型。
52.什么是重写和什么是重载?
53.super调用属性、方法:①在子类的方法或构造器中,通过使用"super.属性"或"super.方法"的方式,显式的调用父类中声明的属性或方法,通常情况下,习惯省略"super."。
②特殊情况:当子类和父类中定义了同名的属性时,要想在子类中调用父类中声明的属性,则必须显式的使用"super.属性"的方式,表明调用的是父类中声明的属性。
③特殊情况:当子类重写了父类中的方法以后,想在子类的方法中调用父类中被重写的方法时,则必须显式的使用"super.方法"的方式,表明调用的是父类中被重写的方法。
54.super调用构造器:①我们可以在子类的构造器中显式的使用"super(形参列表)"的方式,调用父类中声明的指定的构造器。
②"super(形参列表)"的使用,必须声明在子类构造器的首行!
③ 我们在类的构造器中,针对于"this(形参列表)"或"super(形参列表)"只能二选一,不能同时出现。
④在构造器的首行,没显式的声明"this(形参列表)“或"super(形参列表)”,则默认调用的是父类中空参的构造器:super()。
⑤在类的多个构造器中,至少一个类的构造器中使用了"super(形参列表)",调用父类中的构造器。
55.子类对象实例化过程:从结果上看,子类继承父类以后,就获取了父类中声明的属性或方法,创建子类的对象,就会在堆空间中加载父类中声明的属性。
从过程上看:通过子类的构造器创建子类对象时,一定会直接或间接的调用其父类的构造器,进而调用父类的父类的构造器,直到调用了java.lang.Object类中空参的构造器为止。正因为加载过所有的父类的结构,所以才可以看到内存中父类中的结构,子类对象才可以考虑进行调用。
56.多态性:可以理解为一个事物的多种形态。对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用),Person p = new Man(); 。有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。总结:编译,看左边;运行,看右边。多态运行时行为,不是编译时行为。
57.对象的多态性,只适用于方法,不适用于属性(编译和运行都看左边)。
58.Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体。
59.String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。
60.“==”如果比较的是基本数据类型变量,则比较两个变量保存的数据是否相等。(不一定类型要相同,有自动类型提升)如果比较的是引用数据类型变量,则比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体。
61.当我们输出一个对象的引用时,实际上就是调用当前对象的toString()。
62.Object类中toString()的定义:public String toString() {return getClass().getName() + “@” + Integer.toHexString(hashCode());}
63.像String、Date、File、包装类等都重写了Object类中的toString()方法,使得在调用对象的toString()时,返回"实体内容"信息。
64.基本数据类型与对应的包装类:
65.自动装箱和自动拆箱(JDK 5.0之后)
66.static关键字可以用来修饰属性、方法、代码块、内部类。
67.静态变量 vs 实例变量
静态变量:创建了类的多个对象,多个对象共享同一个静态变量。当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,变量的值是修改过了的。
实例变量:创建了类的多个对象,每个对象都独立拥有一套类中的非静态属性。当修改其中一个对象中的非静态属性时,不会导致其他对象中同样的属性值的修改。
68.static修饰属性的说明:① 静态变量随着类的加载而加载,可以通过"类.静态变量"的方式进行调用。
② 静态变量的加载要早于对象的创建。
③ 由于类只会加载一次,则静态变量在内存中也只会存在一份:存在方法区的静态域中。
69.static修饰方法的说明:①随着类的加载而加载,可以通过"类.静态方法"的方式进行调用。
②静态方法中,只能调用静态的方法或属性。非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性。
70.在静态的方法内,不能使用this关键字、super关键字(生命周期)。静态属性和静态方法的使用,都可以从生命周期的角度去理解。
71.单例设计模式:就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例。
代码实现一:
好处:线程安全。
坏处:对象加载时间过长。
代码实现二:
好处:延迟对象的创建。
坏处:线程不安全。
72.静态代码块使用说明:
①内部可以输出语句
②随着类的加载而执行,而且只执行一次
③作用:初始化类的信息
④如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行
⑤静态代码块的执行要优先于非静态代码块的执行
⑥静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构
73.非静态代码块使用说明:
①内部可以输出语句
②随着对象的创建而执行
③每创建一个对象,就执行一次非静态代码块
④作用:可以在创建对象时,对对象的属性等进行初始化
⑤如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行
⑥非静态代码块内可以调用静态的属性、静态的方法,或非静态的属性、非静态的方法
74.实例化子类对象时,涉及到父类、子类中静态代码块、非静态代码块、构造器的加载顺序:由父及子,静态先行。
75.属性的赋值顺序:
①默认初始化
②显式初始化/⑤在代码块中赋值
③构造器中初始化
④有了对象以后,可以通过"对象.属性"或"对象.方法"的方式,进行赋值执行的先后顺序:① - ② / ⑤ - ③ - ④
76.final的使用说明:
①final可以用来修饰的结构:类、方法、变量
②final 用来修饰一个类:此类不能被其他类所继承。比如:String类、System类、StringBuffer类
③final 用来修饰方法:表明此方法不可以被重写,比如:Object类中getClass();
④final 用来修饰变量:此时的"变量"就称为是一个常量
⑤final修饰属性:可以考虑赋值的位置有:显式初始化、代码块中初始化、构造器中初始化
⑥final修饰局部变量:尤其是使用final修饰形参时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参。一旦赋值以后,就只能在方法体内使用此形参,但不能进行重新赋值。
⑦static final 用来修饰属性:全局常量
77.abstract可以用来修饰:类、方法。
abstract修饰类:抽象类
①此类不能实例化。
②抽象类中一定有构造器,便于子类实例化时调用(涉及:子类对象实例化的全过程)。
abstract修饰方法:抽象方法
①抽象方法只有方法的声明,没方法体。
②包含抽象方法的类,一定是一个抽象类。反之,抽象类中可以没有抽象方法的。
③若子类重写了父类中的所的抽象方法后,此子类方可实例化。
④若子类没重写父类中的所有的抽象方法,则此子类也是一个抽象类,需要使用abstract修饰
注意点:abstract不能用来修饰:属性、构造器等结构;abstract不能用来修饰私有方法、静态方法、final的方法、final的类。
78.接口使用interface来定义,Java中,接口和类是并列的两个结构。
79.JDK7及以前:只能定义全局常量和抽象方法
全局常量:public static final的.但是书写时,可以省略不写
抽象方法:public abstract的
JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法
80.接口中不能定义构造器的!意味着接口不可以实例化。
81.Java开发中,接口通过让类去实现(implements)的方式来使用。如果实现类覆盖了接口中的所抽象方法,则此实现类就可以实例化。如果实现类没覆盖接口中所的抽象方法,则此实现类仍为一个抽象类。
82.Java类可以实现多个接口 —>弥补了Java单继承性的局限性格式:class AA extends BB implements CC,DD,EE。
83.接口与接口之间可以继承,而且可以多继承。如下:
84.接口使用上也满足多态性,接口,实际上就是定义了一种规范,下面这个例子可以帮你深刻理解并记住接口!
85.Java中关于接口的新规范
①接口中定义的静态方法,只能通过接口来调用。
②通过实现类的对象,可以调用接口中的默认方法。如果实现类重写了接口中的默认方法,调用时,仍然调用的是重写以后的方法。
③如果子类(或实现类)继承的父类和实现的接口中,声明了同名同参数的默认方法,那么子类在没重写此方法的情况下,默认调用的是父类中的同名同参数的方法。–>类优先原则。
④如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法,那么在实现类没重写此方法的情况下,报错。–>接口冲突。这就需要我们必须在实现类中重写此方法。
⑤如何在子类(或实现类)的方法中调用父类、接口中被重写的方法。
86.内部类的分类:成员内部类(静态、非静态 )、局部内部类(方法内、代码块内、构造器内)。
87.成员内部类的理解:①一方面,作为外部类的成员调用外部类的结构,可以被static修饰,可以被4种不同的权限修饰。
②另一方面,作为一个类类内可以定义属性、方法、构造器等可以被final修饰,表示此类不能被继承。言外之意,不使用final,就可以被继承可以被abstract修饰。
88.如何在外部类创建成员内部类的对象?(静态的,非静态的)
89.如何在成员内部类中调用外部类的结构?
90.在局部内部类的方法中(比如:show) ,如果调用局部内部类所声明的方法 *(比如:method)中的局部变量(比如:num)的话, *要求此局部变量声明为final的。
91.jdk 7及之前版本:要求此局部变量显式的声明为final。jdk 8及之后的版本:可以省略final的声明
92.java异常处理的抓抛模型——“抛”:程序在正常执行的过程中,一旦出现异常,就会在异常代码处,生成一个对应异常类的对象,并将此对象抛出。一旦抛出对象以后,其后的代码就不再执行。
93.关于异常对象的产生:① 系统自动生成的异常对象② 手动的生成一个异常对象,并抛出(throw)。
94.“抓”:可以理解为异常的处理方式:① try-catch-finally② throws
95.异常处理模板:
注意点:①finally是可选的。
②使用try将可能出现异常代码包装起来,在执行过程中,一旦出现异常,就会生成一个对应异常类的对象,根据此对象的类型,去catch中进行匹配。
③一旦try中的异常对象匹配到某一个catch时,就进入catch中进行异常的处理。一旦处理完成,就跳出当前的try-catch结构(在没写finally的情况,继续执行其后的代码。)
④catch中的异常类型如果没子父类关系,则谁声明在上,谁声明在下无所谓。catch中的异常类型如果满足子父类关系,则要求子类一定声明在父类的上面。否则报错。
⑤常用的异常对象处理的方式:⑴ String getMessage() ⑵ printStackTrace()
⑥在try结构中声明的变量,再出了try结构以后,就不能再被调用。
⑦try-catch-finally结构可以嵌套。
⑧finally中声明的是一定会被执行的代码。即使catch中又出现了异常,try中出现了return语句,catch中出现了return语句等情况。
96."throws + 异常类型"写在方法的声明处。指明此方法执行时,可能会抛出的异常类型。throws的方式只是将异常抛给了方法的调用者。并没真正将异常处理掉。
97.如果父类中被重写的方法没用throws方式处理异常,则子类重写的方法也不能使用throws,意味着如果子类重写的方法中异常,必须使用try-catch-finally方式处理。
98.子类重写的方法抛出的异常类型,不大于父类被重写的方法抛出的异常类型。
99.在程序执行中,除了自动抛出异常对象的情况之外,我们还可以手动的throw一个异常类的对象。
100.如何自定义一个异常类?
相关推荐
- MySQL进阶五之自动读写分离mysql-proxy
-
自动读写分离目前,大量现网用户的业务场景中存在读多写少、业务负载无法预测等情况,在有大量读请求的应用场景下,单个实例可能无法承受读取压力,甚至会对业务产生影响。为了实现读取能力的弹性扩展,分担数据库压...
- 3分钟短文 | Laravel SQL筛选两个日期之间的记录,怎么写?
-
引言今天说一个细分的需求,在模型中,或者使用laravel提供的EloquentORM功能,构造查询语句时,返回位于两个指定的日期之间的条目。应该怎么写?本文通过几个例子,为大家梳理一下。学习时...
- 一文由浅入深带你完全掌握MySQL的锁机制原理与应用
-
本文将跟大家聊聊InnoDB的锁。本文比较长,包括一条SQL是如何加锁的,一些加锁规则、如何分析和解决死锁问题等内容,建议耐心读完,肯定对大家有帮助的。为什么需要加锁呢?...
- 验证Mysql中联合索引的最左匹配原则
-
后端面试中一定是必问mysql的,在以往的面试中好几个面试官都反馈我Mysql基础不行,今天来着重复习一下自己的弱点知识。在Mysql调优中索引优化又是非常重要的方法,不管公司的大小只要后端项目中用到...
- MySQL索引解析(联合索引/最左前缀/覆盖索引/索引下推)
-
目录1.索引基础...
- 你会看 MySQL 的执行计划(EXPLAIN)吗?
-
SQL执行太慢怎么办?我们通常会使用EXPLAIN命令来查看SQL的执行计划,然后根据执行计划找出问题所在并进行优化。用法简介...
- MySQL 从入门到精通(四)之索引结构
-
索引概述索引(index),是帮助MySQL高效获取数据的数据结构(有序),在数据之外,数据库系统还维护者满足特定查询算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构...
- mysql总结——面试中最常问到的知识点
-
mysql作为开源数据库中的榜一大哥,一直是面试官们考察的重中之重。今天,我们来总结一下mysql的知识点,供大家复习参照,看完这些知识点,再加上一些边角细节,基本上能够应付大多mysql相关面试了(...
- mysql总结——面试中最常问到的知识点(2)
-
首先我们回顾一下上篇内容,主要复习了索引,事务,锁,以及SQL优化的工具。本篇文章接着写后面的内容。性能优化索引优化,SQL中索引的相关优化主要有以下几个方面:最好是全匹配。如果是联合索引的话,遵循最...
- MySQL基础全知全解!超详细无废话!轻松上手~
-
本期内容提醒:全篇2300+字,篇幅较长,可搭配饭菜一同“食”用,全篇无废话(除了这句),干货满满,可收藏供后期反复观看。注:MySQL中语法不区分大小写,本篇中...
- 深入剖析 MySQL 中的锁机制原理_mysql 锁详解
-
在互联网软件开发领域,MySQL作为一款广泛应用的关系型数据库管理系统,其锁机制在保障数据一致性和实现并发控制方面扮演着举足轻重的角色。对于互联网软件开发人员而言,深入理解MySQL的锁机制原理...
- Java 与 MySQL 性能优化:MySQL分区表设计与性能优化全解析
-
引言在数据库管理领域,随着数据量的不断增长,如何高效地管理和操作数据成为了一个关键问题。MySQL分区表作为一种有效的数据管理技术,能够将大型表划分为多个更小、更易管理的分区,从而提升数据库的性能和可...
- MySQL基础篇:DQL数据查询操作_mysql 查
-
一、基础查询DQL基础查询语法SELECT字段列表FROM表名列表WHERE条件列表GROUPBY分组字段列表HAVING分组后条件列表ORDERBY排序字段列表LIMIT...
- MySql:索引的基本使用_mysql索引的使用和原理
-
一、索引基础概念1.什么是索引?索引是数据库表的特殊数据结构(通常是B+树),用于...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
程序员的开源月刊《HelloGitHub》第 71 期
-
详细介绍一下Redis的Watch机制,可以利用Watch机制来做什么?
-
假如有100W个用户抢一张票,除了负载均衡办法,怎么支持高并发?
-
Java面试必考问题:什么是乐观锁与悲观锁
-
如何将AI助手接入微信(打开ai手机助手)
-
redission YYDS spring boot redission 使用
-
SparkSQL——DataFrame的创建与使用
-
一文带你了解Redis与Memcached? redis与memcached的区别
-
如何利用Redis进行事务处理呢? 如何利用redis进行事务处理呢英文
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)