小猫的java基础知识点汇总(上)

1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?

可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。

2、short s1= 1; s1= s1+1; 有没有错?

s1+1运算时会自动提升类型,结果是int,赋值给s1时,将报告需要强转类型的错误。

3、short s1= 1; s1 += 1;有没有错?

+=是java规定的运算符,编译器会对它进行特殊处理,因此可以正确编译。

4、使用final关键字修饰一个变量时,引用的内容一定不能变?

使用final修饰变量时,是引用变量(也就是地址)不能变,引用变量所指向的对象中的内容还是可以改变的

5、是否可以从static方法内对非static方法调用?为什么?

        不可以。因为非static方法是与对象关联的,必须创建一个对象,才可以在该对象上进行方法调用(对象.方法)。而static方法调用时不需要创建对象,可以直接调用。如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立。

6、Overload和Override的区别?

重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。

重写Override表示子类中的方法可以与父类中的方法的名称和参数完全相同,子类对象调用这个方法时,将调用子类中的定义方法,这就把父类中的方法覆盖了,这也是面向对象编程的多态性的一种表现。

7、Overloaded的方法是否可以改变返回值的类型?

如果几个重载Overloaded的方法的参数列表不一样,它们的返回者类型当然也可以不一样。

如果两个方法的参数列表完全一样,不管返回值是否相同,都不允许。因为无法确定编程者倒底是想调用哪个方法了,因为他们被调用时看起来完全相同。

8、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)?抽象类中是否可以有静态的main方法?

        接口可以继承接口。抽象类可以实现(implements)接口,抽象类可以继承具体类。抽象类中可以有静态的main方法。

        记住抽象类与普通类的唯一区别就是不能创建实例对象和允许有abstract方法。

9、Java中实现多态的机制是什么?

        靠的是父类(或接口定义)的引用变量可以指向子类(或具体实现类)的实例对象。

而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,而不是引用变量的类型中定义的方法。

10、abstractclass和interface有什么区别?

抽象类可以有构造方法,接口中不能有构造方法。

抽象类中可以有普通成员变量,接口中没有普通成员变量

抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

抽象类中的抽象方法类型可以是public,protected,接口中的抽象方法只能是public类型的,并且默认为public abstract。

7. 一个类可以实现多个接口,但只能继承一个抽象类。

11、String s = "Hello";s = s + "world!";执行后,原始的String对象中的内容变了没有?

        没有。因为String被设计成不可变类,所以它的所有对象都是不可变对象。只是s不再指向旧的对象了。

12、下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";

javac编译可以对字符串常量直接相加的表达式进行优化直接得出答案,不必要等到运行期再去进行加法运算处理

这行代码被编译器在编译时优化后,相当于直接定义了一个”abcd”的字符串,所以,上面的代码应该只创建了一个String对象。

13、final, finally, finalize的区别。

        final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

        finally是异常处理语句结构的一部分,表示总是执行。

        finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法.

14、error和exception有什么区别?

        error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。                  exception表示程序还能够克服和恢复的问题

15、Java 中堆和栈区别?
栈常用于保存方法帧和局部变量,而对象总是在堆上分配。

栈通常都比堆小,也不会在多个线程之间共享,而堆被整个 JVM 的所有线程共享。

        栈:在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。

        堆:堆内存用来存放由 new 创建的对象和数组,在堆中分配的内存,由 Java 虚拟机的自动垃圾回收器来管理。

16、能将 int 强制转换为 byte 类型的变量吗?(引申到所有大类型转小类型)
        实际中,我们可以做强制转换,不会报错。

但是存在大类型转小类型的通病: int 是 32 位的,而 byte 是 8 位的,如果强制转化,int 类型的高 24 位将会被丢弃,所以尽量不要这样做。

17、hashCode有什么用?与 a.equals(b) 有什么关系?
        hashCode方法对应对象的 hash 值。它常用于基于 hash 的集合类,如 Hashtable、HashMap、LinkedHashMap等等。根            据 Java 规范,两个使用 equal() 方法来判断相等的对象,必须具有相同的 hash code。

18、垃圾回收的优点和原理。

        垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。

原理:可以给对象添加一个被引用的计数器,就可以判断是否已经是无引用对象。但是难以解决循环引用问题。

如果不下小心直接把 Obj1-reference 和 Obj2-reference 置 null。则在 Java 堆当中的两块内存依然保持着互相引用无法回收。

可达性分析法:通过一系列的 ‘GC Roots’ 的对象作为起始点,从这些节点出发所走过的路径称为引用链。当一个对象到 GC Roots 没有任何引用链相连的时候说明对象不可用。 

19,java中会存在内存泄漏吗

内存泄漏:指一个不再被程序使用的对象或变量一直被占据在内存中。java中有垃圾回收机制,它可以保证当对象不再被引用的时候,对象将自动被垃圾回收器从内存中清除掉。

        由于Java使用有向图的方式进行垃圾回收管理,可以消除引用循环的问题,例如有两个对象,相互引用,只要它们和根进程不可达,那么GC也是可以回收它们的。

java中的内存泄露的情况:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露.

尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场景。通俗地说,就是程序员可能创建了一个对象,以后一直不再使用这个对象,这个对象却一直被引用,即这个对象无用但是却无法被垃圾回收器回收的,这就是java中可能出现内存泄露的情况,例如,缓存系统,我们加载了一个对象放在缓存中(例如放在一个全局map对象中),然后一直不再使用它,这个对象一直被缓存引用,但却不再被使用。

 

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

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

相关文章

机器学习算法分类总结

机器学习方法分类总结 这篇文章只是一个类似于知识概括的文章,主要作用是帮忙梳理: 1) 分类 贝叶斯模型(Bayesian Mode) - 朴素贝叶斯算法(Naive Bayesian Mode) - 平均单依赖估计(AveragedO…

无限踩坑系列(5)-MySQLdb

MySQLdb在Python2.x 时使用的是MySQLdbpython3中这个库已经不再使用了,所有的功能都由pymysql或mysqlclient替代。所以 想在python3中配MySQLdb真是一个深的不能再深的坑了。下面记录了愚蠢的填坑过程,仅做有类似错误的参考。参考文档:https:…

后端 分页组件实例

/*** 分页相关信息*/ public class Page {//当前页码private int current1;//显示的上限private int limit10;//数据总数//用于计算页数private int rows;//路径private String path;public int getCurrent() {return current;}public void setCurrent(int current) {if (curre…

大数据学习(07)--MapReduce

文章目录目录1.MapReduce介绍1.1 什么是分布式并行编程?1.2 MapReduce模型介绍1.3 map和reduce函数2.MapReduce体系架构3.MapReduce工作流程3.1 概述3.2 MapReduce各个阶段介绍3.3 shuffle过程介绍3.3.1 shuffle过程简介3.3.2 map中的shuffle过程3.3.3 reduce中的sh…

关闭用playsound函数的WAV文件

播放声音文件 PlaySound函数应用 1.关闭用playsound函数的WAV文件 PlaySound(0,NULL,0);即可 // test2.cpp : Defines the entry point for the application.//#include "stdafx.h"#include <mmsystem.h>int APIENTRY WinMain(HINSTANCE hInstance, …

身份验证

传统身份验证的方法 HTTP 是一种没有状态的协议&#xff0c;也就是它并不知道是谁是访问应用。这里我们把用户看成是客户端&#xff0c;客户端使用用户名还有密码通过了身份验证&#xff0c;不过下回这个客户端再发送请求时候&#xff0c;还得再验证一下。 解决的方法就是&…

Pytorch(4)-模型保存-载入-eval()

模型保存与提取1. 整个模型 保存-载入2. 仅模型参数 保存-载入3. GPU/CPU模型保存与导入4. net.eval()--固定模型随机项神经网络模型在线训练完之后需要保存下来&#xff0c;以便下次使用时可以直接导入已经训练好的模型。pytorch 提供两种方式保存模型:方式1&#xff1a;保存整…

大数据学习(08)--Hadoop中的数据仓库Hive

文章目录目录1.什么是数据仓库&#xff1f;1.1数据仓库概念1.2传统数据仓库面临的挑战1.3 Hive介绍1.4 Hive与传统数据库的对比1.5 Hive在企业中的部署与应用2.Hive系统架构3.Hive工作原理3.1 SQL转换为MapReduce作业的基本原理3.2 Hive中SQL查询转换MapReduce作业的过程4.Hive…

dubbo知识点总结 持续更新

Dubbo 支持哪些协议&#xff0c;每种协议的应用场景&#xff0c;优缺点&#xff1f;  dubbo&#xff1a; 单一长连接和 NIO 异步通讯&#xff0c;适合大并发小数据量的服务调用&#xff0c; 以及消费者远大于提供者。传输协议 TCP&#xff0c;异步&#xff0c;Hessian 序列化…

使用Linux auto Makefile自动生成的运行步骤

首先创建一个 Linux Makefile.am.这一步是创建Linux Makefile很重要的一步&#xff0c;automake要用的脚本配置文件是Linux Makefile.am&#xff0c;用户需要自己创建相应的文件。之后&#xff0c;automake工具转换成Linux Makefile.in。AD&#xff1a; 在向大家详细介绍Linux …

无限踩坑系列(6)-mySQL数据库链接错误

mySQL数据库链接错误错误1错误2长链接短连接应用场景需要一直访问mySQL数据库&#xff0c;遇到如下错误&#xff1a;错误1 释放已经释放的数据库链接conn.&#xff0c;或者&#xff0c;操作已经释放的数据库链接conn.或者失去链接后再操作数据库都可能会报这个错误 aise err.I…

初探函数式编程和面对对象式编程

文章目录目录1.函数式编程和面向对象编程概念1.1 函数式编程1.2 面向对象编程2.函数式编程和面向对象编程的优缺点2.1 函数式编程优点缺点2.2 面对对象编程优点缺点3.为什么在并行计算中函数式编程比较好3.1 什么是并行计算3.2 函数式编程兴起原因目录 1.函数式编程和面向对象…

linux常用解压和压缩文件的命令

linux常用解压和压缩文件的命令 .tar 解包&#xff1a;tar xvf FileName.tar打包&#xff1a;tar cvf FileName.tar DirName&#xff08;注&#xff1a;tar是打包&#xff0c;不是压缩&#xff01;&#xff09;———————————————.gz解压1&#xff1a;gunzip FileN…

Python外(4)-读写mat文件

读写mat文件1.读取2.写入.mat 是matlab中数据存储的标准格式&#xff0c;Python中能够通过库scipy读取和保存。导入scipy库 from scipy import io 1.读取 io.loadmat(file_name, mdictNone, appendmatTrue, **kwargs) 简便方式&#xff1a; io.loadmat(file_name) append mat–…

Linux下的xml文件的创建

创建一个xml文档流程如下&#xff1a; l 用xmlNewDoc函数创建一个文档指针doc&#xff1b; l 用xmlNewNode函数创建一个节点指针root_node&#xff1b; l 用xmlDocSetRootElement将root_node设置为doc的根结点&#xff1b; l 给root_node添加一系列的子节点&#x…

压力测试http_load 通过修改配置测试https协议成功了。

到http://www.acme.com/software/http_load/ 下载http_load &#xff0c;安装也很简单直接make;make instlall 就行。 如果你需要测试https&#xff0c;你必须将 Makefile中 # CONFIGURE: If you want to compile in support for https, uncomment these # definitions. You w…

面向对象设计与分析40讲(16)静态工厂方法模式

前面我们介绍了简单工厂模式&#xff0c;在创建对象前&#xff0c;我们需要先创建工厂&#xff0c;然后再通过工厂去创建产品。 如果将工厂的创建方法static化&#xff0c;那么无需创建工厂即可通过静态方法直接调用的方式创建产品&#xff1a; // 工厂类&#xff0c;定义了静…

搜索详解

搜索 一.dfs和bfs简介 深度优先遍历(dfs) 本质&#xff1a; 遍历每一个点。 遍历流程&#xff1a; 从起点开始&#xff0c;在其一条分支上一条路走到黑&#xff0c;走不通了就往回走&#xff0c;只要当前有分支就继续往下走&#xff0c;直到将所有的点遍历一遍。 剪枝&a…

Python外(5)-for-enumerate()-zip()

for循环小技巧技巧1&#xff1a;enumerate()技巧2&#xff1a;打包两个可遍历数据&#xff0c;一起循环-zip()技巧1&#xff1a;enumerate() 在使用pytorch训练网络的过程中&#xff0c;官方教程给出了 for i, data in enumerate(trainloader, 0): 这涉及到enumerate函数的使用…

特征工程总结

目录1 特征工程是什么&#xff1f; 2 数据预处理   2.1 无量纲化     2.1.1 标准化     2.1.2 区间缩放法     2.1.3 标准化与归一化的区别   2.2 对定量特征二值化   2.3 对定性特征哑编码   2.4 缺失值计算   2.5 数据变换 3 特征选择   3.1 Filter …