码个蛋(codeegg) 第 822 次推文
码妞看世界
1. Java创建对象的几种方式
使用new关键字
使用Class类的newInstance方法
使用Constructor类的newInstance方法
使用clone方法
使用反序列化
2. 重载(overload)和重写(override)的区别
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态 性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为 重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方 法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求。
方法重载的规则:
方法名一致,参数列表中参数的顺序,类型,个数不同。
重载与方法的返回值无关,存在于父类和子类,同类中。
可以抛出不同的异常,可以有不同修饰符。
方法重写的规则:
参数列表必须完全与被重写方法的一致,返回类型必须完全与被重写方法的返回类型一致。
构造方法不能被重写,声明为 final 的方法不能被重写,声明为 static 的方法不能被重写,但是能够被再次 声明。
访问权限不能比父类中被重写的方法的访问权限更低。
重写的方法能够抛出任何非强制异常(UncheckedException,也叫非运行时异常),无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则 可以。
3. 谈谈对 java 注解的理解
定义:提供一种为程序元素设置元数据的方法,不能直接干扰程序代码的运行,无论增加或删除注解,代码都能够正常运行。
功能:
作为特定的标记,用于告诉编译器一些信息
编译时动态处理,如动态生成代码
运行时动态处理,作为额外信息的载体,如得到注解信息
分类:
标准注解:Override、Deprecated、SuppressWarnings 标准 Annotation 是指 Java 自带的几个 Annotation,上面三个分别表示重写函数,不鼓励使用(有更好方式、使用有风险或已不在维护),忽略某项 Warning;
元注解:@Retention、@Target、@Inherited、@Documented 用来定义 Annotation 的 Annotation
自定义注解:自定义 Annotation 表示自己根据需要定义的 Annotation,定义时需要用到上面的元 Annotation 这里是一种分类而已,也可以根据作用域分为源码时、编译时、运行时 Annotation
元注解
@Target 用于描述注解的使用范围(即:被描述的注解可以用在什么地方),说明了Annotation所修饰的对象范围,Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。
@Retention 定义了该Annotation被保留的时间长短,表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
@Documented 用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。
@Inherited 是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。
自定义注解
使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。可以通过default来声明参数的默认值。
支持的格式:
所有基本数据类型(int,float,boolean,byte,double,char,long,short)
String类型
Class类型
enum类型
Annotation类型
以上所有类型的数组
4. 什么是不可变对象,它对写并发应用有什么帮助
不可变对象(Immutable Objects)即对象一旦被创建它的状态(对象的数据,也即对象属性值)就不能改变,反之即为可变对象(Mutable Objects)。
不可变对象的类即为不可变类(Immutable Class)。Java平台类库中包含许多不可变类,如String、基本类型的包装类、BigInteger和BigDecimal等。
不可变对象天生是线程安全的。它们的常量(域)是在构造函数中创建的。既然它们的状态无法修改,这些常量永远不会变。
不可变对象永远是线程安全的。
只有满足如下状态,一个对象才是不可变的;
它的状态不能在创建后再被修改;
所有域都是final类型;
并且,它被正确创建(创建期间没有发生this引用的溢出)。
5. 类什么时候被初始化
类初始化阶段是类加载过程的最后阶段。在这个阶段,java虚拟机才真正开始执行类定义中的java程序代码。那么类什么时候会被初始化呢? 1.创建类的实例,也就是new一个对象 2.访问某个类或接口的静态变量,或者对该静态变量赋值 3.调用类的静态方法 4.反射(Class.forName("com.example.load")) 5.初始化一个类的子类(会首先初始化子类的父类) 6.JVM启动时标明的启动类,即文件名和类名相同的那个类
只有这6中情况才会导致类的类的初始化。 类的初始化步骤: 1)如果这个类还没有被加载和链接,那先进行加载和链接 2)假如这个类存在直接父类,并且这个类还没有被初始化(注意:在一个类加载器中,类只能初始化一次),那就初始化直接的父类(不适用于接口) 3) 加入类中存在初始化语句(如static 变量和static块),那就依次执行这些初始化语句。
往期文章:
今日问题:
每天一道题,强健Android人。
专属升级社区:《这件事情,我终于想明白了》
文章浏览阅读738次,点赞23次,收藏29次。在大数据与人工智能技术蓬勃发展的背景下,我们精心打造了一款基于Python的豆瓣电影数据分析与可视化系统,致力于为电影爱好者与专业人士提供全方位、个性化的观影服务体验。现今,人们对电影欣赏的需求已超越单一的娱乐诉求,转而追求个性化推荐、深度解读及社区互动的综合体验。该系统构筑了涵盖数据采集、数据概览、电影检索、数据管理、词云分析及多维可视化六大支柱的立体服务矩阵。首先,系统从豆瓣电影平台抓取包括影片详情、评分、评论、标签等在内的丰富信息,确保数据获取的针对性与合规性。
文章浏览阅读1.8k次,点赞3次,收藏17次。github项目地址实验六 最大流应用问题一、实验目的:(1)掌握最大流算法思想。(2)学会用最大流算法求解应用问题。二、内容:论文评审问题有m篇论文和n个评审,每篇论文需要安排a个评审,每个评审最多评b篇论文。请设计一个论文分配方案。要求应用最大流解决上述问题,画出m=10,n=3的流网络图并解释说明流网络图与论文评审问题的关系。编程实现所设计算法,计算a和b取不同值情况下的分配方案,如果没有可行方案则输出无解。三、实验过程及结果一:实验结果正确性展示对于数据a = 2,b ._图论——最大流应用问题算法设计与分析
文章浏览阅读1.8k次,点赞4次,收藏2次。route.query刷新获取不到的问题_若依路由传参query刷新页面参数丢失
文章浏览阅读142次。数字化工厂系统涉及产品设计、生产规划与生产执行三大环节_数字化工厂管理系统
文章浏览阅读830次,点赞11次,收藏30次。最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
文章浏览阅读119次。引入jar包 <!-- https://mvnrepository.com/artifact/com.github.penggle/kaptcha --><dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artif..._com.github.penggle:kaptcha 应用
文章浏览阅读128次。注解(annotation):可以被其他程序(比如编译器)读取元注解:负责注解其他注解@Target 描述注解的使用范围@Retention 表示需要在什么级别保存该注解信息,用于描述注解的生命周期(SOURCE<CLASS<RUNTIME)@Documented 说明该注解将被包含在javadoc中@Inherited 说明子类可以继承父类中的该注解反射机制 Reflectionjava静态语言,有了反射机制–动态性动态语言:Object-C,C#,js,pytho_java 注解(annotation)视频
文章浏览阅读5.1k次。最近在学angular4,因为angularjs中默认是双向数据绑定,但是如果在比较复杂的页面使用的话会引起性能问题,那是因为angularjs会在页面保存一个所有数据绑定的列表,每当数据发生变化时,angularjs都会反复查看列表,以保证数据一致性。 然后在angular4中默认是单向数据绑定。但是有时候还是会要用到双向数据绑定。我目前遇到两种使用的场景: (1)是在同一组件_为什么angular 4中的@input()行为像双向数据绑定而不是单向数据绑定?
文章浏览阅读1.7k次。独显台式机安装Ubuntu 16.04时黑屏问题用U盘为独显台式机安装Ubuntu 16.04时系统没有自动跳入Ubuntu安装界面而陷入黑屏状态,这实在影响心情,然而解决该问题的方法并不困难。 grub中插入nomodeset1、U盘启动后进入grub界面,将光标调至Install Ubuntu上,按’e’键进入编辑模式; 2、在代码中找到”quiet splash”, 在”..._dell precision 3650 安装ubuntu 16.04 黑屏
文章浏览阅读232次。C编译器将所有操作数都转换成取值范围较大的操作数的类型。类型提升(Type Promotion)类型数据的运算结构的类型是什么?类型数据的运算结构的类型是什么?根据参与运算的操作数类型。从低级别向高级别自动转换。
文章浏览阅读2.9k次。提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、命令安装二、下载压缩包解压后手动配置环境1.安装依赖2.从python官网下载安装包3.使用命令解压总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、命令安装以python3.9为例,打开终端,输入:sudo apt-get install _openkylin系统怎么装python
文章浏览阅读370次。一、网络桥接需要知道:网桥:物理机上网是通过内核调用网卡与外界进行联系,虚拟机的网卡是虚拟化的,不能直接上网 ,在物理机的内核上开一个网络桥接口将虚拟机内核和物理机网卡连接在一起,通过物理机上网网桥是对帧进行转发的技术,根据MAC分块区,可隔离碰撞,网桥将网络的多个网段在数据链路层连接起来,也叫桥接器,是连接两个局域网的一种存储转发设备,将一个大的lan分割为多个网段或者将两个以上的lan互..._ulbvfrb