百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

来了来了,100条必背JAVA知识点(下)

wptr33 2025-07-01 23:41 86 浏览

接着前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.如何自定义一个异常类?

相关推荐

oracle数据导入导出_oracle数据导入导出工具

关于oracle的数据导入导出,这个功能的使用场景,一般是换服务环境,把原先的oracle数据导入到另外一台oracle数据库,或者导出备份使用。只不过oracle的导入导出命令不好记忆,稍稍有点复杂...

继续学习Python中的while true/break语句

上次讲到if语句的用法,大家在微信公众号问了小编很多问题,那么小编在这几种解决一下,1.else和elif是子模块,不能单独使用2.一个if语句中可以包括很多个elif语句,但结尾只能有一个else解...

python continue和break的区别_python中break语句和continue语句的区别

python中循环语句经常会使用continue和break,那么这2者的区别是?continue是跳出本次循环,进行下一次循环;break是跳出整个循环;例如:...

简单学Python——关键字6——break和continue

Python退出循环,有break语句和continue语句两种实现方式。break语句和continue语句的区别:break语句作用是终止循环。continue语句作用是跳出本轮循环,继续下一次循...

2-1,0基础学Python之 break退出循环、 continue继续循环 多重循

用for循环或者while循环时,如果要在循环体内直接退出循环,可以使用break语句。比如计算1至100的整数和,我们用while来实现:sum=0x=1whileTrue...

Python 中 break 和 continue 傻傻分不清

大家好啊,我是大田。今天分享一下break和continue在代码中的执行效果是什么,进一步区分出二者的区别。一、continue例1:当小明3岁时不打印年龄,其余年龄正常循环打印。可以看...

python中的流程控制语句:continue、break 和 return使用方法

Python中,continue、break和return是控制流程的关键语句,用于在循环或函数中提前退出或跳过某些操作。它们的用途和区别如下:1.continue(跳过当前循环的剩余部分,进...

L017:continue和break - 教程文案

continue和break在Python中,continue和break是用于控制循环(如for和while)执行流程的关键字,它们的作用如下:1.continue:跳过当前迭代,...

作为前端开发者,你都经历过怎样的面试?

已经裸辞1个月了,最近开始投简历找工作,遇到各种各样的面试,今天分享一下。其实在职的时候也做过面试官,面试官时,感觉自己问的问题很难区分候选人的能力,最好的办法就是看看候选人的github上的代码仓库...

面试被问 const 是否不可变?这样回答才显功底

作为前端开发者,我在学习ES6特性时,总被const的"善变"搞得一头雾水——为什么用const声明的数组还能push元素?为什么基本类型赋值就会报错?直到翻遍MDN文档、对着内存图反...

2023金九银十必看前端面试题!2w字精品!

导文2023金九银十必看前端面试题!金九银十黄金期来了想要跳槽的小伙伴快来看啊CSS1.请解释CSS的盒模型是什么,并描述其组成部分。答案:CSS的盒模型是用于布局和定位元素的概念。它由内容区域...

前端面试总结_前端面试题整理

记得当时大二的时候,看到实验室的学长学姐忙于各种春招,有些收获了大厂offer,有些还在苦苦面试,其实那时候的心里还蛮忐忑的,不知道自己大三的时候会是什么样的一个水平,所以从19年的寒假放完,大二下学...

由浅入深,66条JavaScript面试知识点(七)

作者:JakeZhang转发链接:https://juejin.im/post/5ef8377f6fb9a07e693a6061目录由浅入深,66条JavaScript面试知识点(一)由浅入深,66...

2024前端面试真题之—VUE篇_前端面试题vue2020及答案

添加图片注释,不超过140字(可选)1.vue的生命周期有哪些及每个生命周期做了什么?beforeCreate是newVue()之后触发的第一个钩子,在当前阶段data、methods、com...

今年最常见的前端面试题,你会做几道?

在面试或招聘前端开发人员时,期望、现实和需求之间总是存在着巨大差距。面试其实是一个交流想法的地方,挑战人们的思考方式,并客观地分析给定的问题。可以通过面试了解人们如何做出决策,了解一个人对技术和解决问...