Java基础

news2025/1/17 16:34:20
抽象类和普通类的区别
  • 抽象类不能被实例化。-- 抽象类只在分配了在栈中的引用,没有分配堆中的内存
  • 抽象类可以有构造函数,被继承时子类必须实现(调用)父类一个构造方法 — 《因为子类会继承父类的构造方法,如果父类方法中的构造函数是带有参数的,子类默认的构造函数会调用super(),在父类中是找不到的》
  • 抽象方法不能被声明为静态 -- 抽象方法都没有主体,静态也就没有意义了
  • 抽象类中可以允许普通方法有主体
  • 含有抽象方法的类必须申明为抽象类
  • 抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类
抽象类和接口的区别
  • 抽象类和接口都不能直接实例化
  • 接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现
  • 接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
  • 抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
  • 抽象方法只能声明,不能实现,接口是设计的结果 ,抽象类是重构的结果
  • 抽象类里可以没有抽象方法
  • 如果一个类里有抽象方法,那么这个类只能是抽象类
  • 抽象方法要被实现,所以不能是静态的,也不能是私有的。
  • 接口可继承接口,并可多继承接口,但类只能单根继承。
    
构造器,普通代码块,静态代码块的区别
  • 无参数构造器:不写,系统会自动添加
  • 有参数构造器:如果你定义了一个有参数的构造器,系统不会自动添加无参数构造器,那么在实例化对象的时候必须带上参数,不然会报错
  • 构造代码块:对象一实例化就执行,每实例化一次执行一次
  • 静态代码块:对象实例化就执行,无论new多少个对象,仅执行一次
  • 无继承的初始化顺序:
  • 静态代码块 > 普通代码块 > 构造器
  • 有继承的初始化顺序:
  • 父类静态代码块 > 子类静态代码块 > 父类普通代码块 > 父类构造器 > 子类普通代码块 > 子类构造器
静态变量和实例变量的区别
  • 静态变量前要加static关键字,而实例变量前则不加
  • 实例变量时实例化后才会分配空间,而静态变量当类加载的时候就分配内存空间
  • 非static方法可以调用static方法
  • static方法不能访问非statis方法, 因为当一个static方法被调用时,可能还没有创建任何实例对象
为什么内部类有静态成员那么内部类必须是静态的
  • 内部类是外部类的一个成员,可以等同于外部类的一个属性或者方法。
  • 非静态的内部类是外部类对象的一个成员,必须先有外部类的对象才有这个内部类,它是属于对象的。
  • 内部类的静态成员不属于对象的,也就是类在加载的时候就存在了,那么这就发生冲突了,也就是说外部类还没有new对象前,这个内部类是不存在的,而这个内部类的静态成员就存在了,这就好比没有鸡就先有鸡蛋一样。
  • 普通内部类需要外部类声明的对象来创建内部类,静态内部类不需要
Java中private、protected、public、default区别
  • public:可以被所有其他类所访问
  • private:只能被自己访问和修改
  • protected:自身、子类及同一个包中类可以访问 ( 但是只能在子类的内部进行访问,即:(this.)方法名、(this.)属性名进行访问和操作)
  • default:同一包中的类可以访问,声明时没有加修饰符,认为是friendly。
使用final关键字修饰一个变量时,是引用变量不能变,还是引用对象不能变
  • 是引用变量不能变,引用对象中的内容还是可以变的,比如StringBuffer
字符流和字节流的区别
  • 字节流操作的基本单元为字节;字符流操作的基本单元为Unicode码元。
  • 字节流默认不使用缓冲区;字符流使用缓冲区。
  • 字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元;字符流通常处理文本数据,它支持写入及读取Unicode码元。
  • 底层设备永远只接受字节数据,有时候要写字符串到底层设备,需要将字符串转成字节再进行写入。字符流是字节流的包装,字符流则是直接接受字符串,它内部将串转成字节,再写入底层设备,这为我们向IO设别写入或读取字符串提供了一点点方便。
        
“==”和“equals”区别
  • == : 如果判断值类型的话,判断内容是否相同。如果判断引用类型则是判断内存地址是否相同
  • equals : 判断内容是否相同
transient关键字有何作用
  • 修饰不需要序列化的字段
反射
  • 对于任意一个类,都能够知道这个类的所有属性和方法;对于任何一个对象都能够调用它的任意方法和属性;
  • 在程序运行状态中,能够动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
  • 运用场景:
  • 做基础框架的时候会用得上,一般应用层面很少,不过这种东西,基本现在很多开源框架都已经给你封装好了,自己基本用不着写。Spring也用到了。经典的就是xml或者properties里面写上了配置,然后在Java类里面解析xml或properties里面的内容,得到一个字符串,然后用反射,根据这个字符串获得某个类的实例,这样就可以动态配置一些东西,不用每一次都要在代码里面去new或者做其他的事情,以后要改的话直接改配置文件,代码维护起来就很方便了。
            
动态代理和静态代理的区别
  • 静态代理的缺点
  • 代理类和委托类实现了相同的接口方法,如果接口新增一个方法,所有的类都要实现这个方法
  • 代理对象只服务于一种类型的对象
  • 动态代理的优点
  • 一个代理类完成全部接口和方法的代理功能
  • 一个代理类能代理各种类型的对象
jdk动态代理和cglib动态代理的区别
  1. 代理模式:
  2. 代理类和被代理类实现共同的接口(或继承),代理类中存有指向被代理类的索引,实际执行时通过调用代理类的方法、实际执行的是被代理类的方法。而AOP,是通过动态代理实现的。
  3. 区别:
  4. JDK动态代理只能对实现了接口的类生成代理,而不能针对类
  5. CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法(继承)
  6. Spring在选择JDK还是CGLib 的依据
  7. 当Bean实现接口时,Spring就会用JDK的动态代理
  8. 当Bean没有实现接口时,Spring使用CGlib是实现
  9. 可以强制使用CGlib(在spring配置中加入<aop:aspectj-autoproxy proxy-target-class="true"/>)
  10. CGLib比JDK快?
  11. 使用CGLib实现动态代理,CGLib底层采用ASM字节码生成框架,使用字节码技术生成代理类,比使用Java反射效率要高。唯一需要注意的是,CGLib不能对声明为final的方法进行代理,因为CGLib原理是动态生成被代理类的子类
  12. 在对JDK动态代理与CGlib动态代理的代码实验中看,1W次执行下,JDK7及8的动态代理性能比CGlib要好20%左右。
    
synchronized与Lock的区别 
  • 首先synchronized是java内置关键字,在jvm层面,Lock是个java类
  • synchronized无法判断是否获得锁的状态,Lock可以判断是否获取到锁
  • synchronized会自动释放锁(a 线程执行同步代码会释放;b线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()放啊释放锁),否则容易造成线程死锁
  • 用synchronized一个线程堵塞了,其他线程会一直等待下去,Lock锁就不会一直等待下去,有些方法尝试几秒获取不到锁,不用一直等待就结束了
  • synchronized的锁可重入,不可中断,非公平,而Lock锁可重入,可判断,可公平

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/49096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

乾元通多卡聚合路由设备海上通信应用解决方案

随着海上通信的发展&#xff0c;在各种应用需求的推动下&#xff0c;海上通信正在向着定制化的需求迈进。 海上通信通信建设目的是要构建一个战时、巡逻和应急情况下移动通信枢纽&#xff0c;为战时、巡逻和应急状态下提供多种通信保障手段。 乾元通智能融合通信设备可配合装…

Graalvm安装配置与springboot3.0尝鲜

Graalvm安装配置与springboot3.0尝鲜 Spring 团队一直致力于 Spring 应用程序的原生映像支持已有一段时间了。经过3 年的孵化春季原生Spring Boot 2 的实验性项目&#xff0c;原生支持将在 Spring Framework 6 和 Spring Boot 3 中正式发布&#xff01; 安装Graalvm 由于spri…

别再问我Python打包成exe了!(终极版)

那今天我就给大家全面总结一下&#xff1a;Python如何打包成exe&#xff0c;以及如何打得足够小。 一、标准打包 目前比较常见的打包exe方法都是通过Pyinstaller来实现的&#xff0c;本文也将使用这种常规方法。如果对这块已经很熟悉的小伙伴&#xff0c;可以直接下滑到本文下…

Javaweb的AJAX及Axios框架使用(封装AJAX)

概念: AJAX(Asynchronous JavaScript And XML):异步的JS和XML。 作用: 与服务器进行数据交换 :通过AJAX可以给服务器发送请求。使用AJAX和服务器进行通信&#xff0c;就可以使用HTMLAJAX来替换JSP页面。异步交互 :可以在不重新加载整个页面的情况下&#xff0c;与服务器交互…

[附源码]SSM计算机毕业设计学生宿舍管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

永磁同步电机转子位置估算专题——正交锁相环

前言 在电机转子位置估算算法中&#xff0c;常常用到锁相环获取磁链信号或反电势信号中的转子位置信息&#xff0c;考虑到包含转子位置信息的磁链信号或反电势信号多被分解在α,β\alpha,\betaα,β轴&#xff0c;以下内容侧重分析适用于该工况的正交锁相环。 1、正交锁相环原…

线性代数学习笔记10-3:奇异值分解SVD(从四个子空间角度理解)

从四个子空间角度理解SVD AUmmΣmnVnnTA U_{m \times m}\Sigma_{m \times n}V_{n \times n}^TAUmm​Σmn​VnnT​ 将A\mathbf {A}A视为线性变换&#xff0c;并将整个Rn\mathbf R^nRn空间拆分为两部分&#xff0c;即A\mathbf {A}A的行空间&#xff08;维数rrr&#xff09;和零空…

cisco asa学习笔记

cisco asa学习笔记一、网络模拟实验中的问题调试记录1、ASA自身接口地址ping不通(从远端路由过来的主机)2、同安全级别的接口默认不能通信&#xff0c;怎么才能通信&#xff1f;3、一个asa连接3个路由器&#xff0c;互联互通解决方案<1>方案1 全局开启policy-map inspect…

C++习题2

指针调用数组元素 指针调用数组元素 int a[3][4] {{1,4,7,10},{2,5,8,11},{3,6,9,12}};int* pa[3] { a[0],a[1],a[2] };int(*pb)[4]; pb a;int** q pa;cout << *(a[2] 3)<<endl;cout << *(*(pa 2) 3)<<endl;cout << pb[2][3]<<en…

springboot + dubbo 整合Sentinel限流

一、前言 限流对一个生产环境的系统来说&#xff0c;具有重要的意义&#xff0c;限流的目的是为了保护系统中的某些核心业务资源不被瞬间的大并发流量冲垮而采取的一种措施&#xff0c;因此一个成熟的架构设计方案&#xff0c;限流也需要纳入到架构设计和规划中。 二、常用的限…

【linux】进程控制详述

进程控制一、进程创建1.1 fork 的补充1.2 写时拷贝1.3 fork 的使用场景二、进程终止2.1 退出码2.2 退出情况2.3 退出方式三、进程等待3.1 进程等待的原因3.2 进程等待的方法3.2.1 status 位图结构3.2.2 阻塞等待和非阻塞等待四、进程程序替换4.1 程序替换的原理4.2 程序替换函数…

[Spring]第五篇:AOP面向切面编程概念

AOP切面编程一般可以帮助我们在不修改现有代码的情况下,对程序的功能进行拓展,往往用于实现 日志处理,权限控制,性能检测,事务控制等 AOP实现的原理就是动态代理,在有接口的情况下,使用JDK动态代理,在没有接口的情况下使用cglib动态代理 为Dao层所有的add方法添加一个性能记录功…

jupyter中配置多种虚拟环境

Microsoft Windows [版本 10.0.19044.2251] © Microsoft Corporation。保留所有权利。 C:\Users\ThinkStation>conda activate pytorch(pytorch) C:\Users\ThinkStation>conda install ipykernelCollecting package metadata (current_repodata.json): done Solvin…

CAS:956748-40-6|Biotin-PEG-Azide|Biotin-PEG-N3|生物素PEG叠氮供应

由抗生物素或链霉亲和素结合PEG衍生物化学试剂Biotin-PEG-Azide&#xff08;Biotin-PEG-N3&#xff09;&#xff0c;其中文名为生物素-聚乙二醇-叠氮&#xff0c;它所属分类为Azide PEG Biotin PEG。CAS编号为956748-40-6。 该PEG试剂的分子量均可定制&#xff0c;有&#xff…

POSIX线程(一)

目录 一、前言 二、What Is a Thread? 三、Advantages and Drawbacks of Threads 四、A First Threads Program 1、A Simple Threaded Program&#xff08;thread1.c&#xff09; 五、Simultaneous Execution 1、Simultaneous Execution of Two Threads&#xff08;thre…

Caffeine 源码、架构、原理(史上最全,10W超级字长文)

文章很长&#xff0c;而且持续更新&#xff0c;建议收藏起来&#xff0c;慢慢读&#xff01;疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 &#xff1a; 免费赠送 :《尼恩Java面试宝典》 持续更新 史上最全 面试必备 2000页 面试必备 大厂必备 涨薪必备 免费赠送 经典…

IbBBX24–IbTOE3–IbPRX17模块通过清除甘薯中的活性氧来增强甘薯对非生物胁迫耐受性

文章信息 题目&#xff1a;The IbBBX24–IbTOE3–IbPRX17 module enhances abiotic stress tolerance by scavenging reactive oxygen species in sweet potato 刊名&#xff1a;New Phytologist 作者&#xff1a;Huan Zhang&#xff0c;Shaozhen He et al. 单位&#xff1…

终于有阿里p8进行了大汇总(Redis+JVM+MySQL+Spring)还有面试题解全在这里了!

Redis特性 Redis是一直基于键值对的NoSQL数据库&#xff1b; Redis支持5种主要数据结构&#xff1a;string、hash、list、set、zset以及bitmaps、hyperLoglog、GEO等特化的数据结构&#xff1b; Redis是内存数据库&#xff0c;因此它有足够好的读写性能&#xff1b; Redis支持…

[附源码]Python计算机毕业设计SSM临港新片区招商引资项目管理系统的设计与实现(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

jmeter性能测试使用梯度测试的方法

JMeterPlugins-Standard.jar下载地址&#xff1a;Download :: JMeter-Plugins.org 项目验收&#xff0c;用jmeter做并发测试&#xff0c;测试单位不通过&#xff0c;我们可以 仔细一问测试单位&#xff0c;嘿&#xff0c;jmeter写个并发数做测试不算并发测试&#xff0c;要做…