Java基础问题
文章平均质量分 93
ProLayman
这个作者很懒,什么都没留下…
展开
-
异常一定要捕获或继续向上抛出吗
文章目录先给结论方法签名throws Exception方法体中throw new Exception调用不捕获调用捕获启示先给结论异常一定要捕获或继续向上抛出吗?答:一,语法层面,不一定。方法签名的Exception一定要捕获或继续向上抛出,否则编译即出错(Java语法),但方法体中throw new Exception则不一定要捕获或抛出。二,良好的代码习惯 & 代码鲁棒性层面,是的,一定要捕获或继续向上抛出。方法签名throws Exception显然,如果一个方法签名上有异常原创 2021-06-25 18:42:53 · 3658 阅读 · 3 评论 -
Spring validation框架简介
缘起做SpringBoot项目时需要验证request参数,e.g:这样的需求太常见了,几乎每个Controller接口都要验证,对于普通的校验规则如果手动校验,重复又繁琐,而且特别不优雅。试想,谁想在每个方法前都要排上一长串校验方法呢?public String hello(@RequestParam("name") String name) throws Exception { validateNotNull(name); validateNotBlank(nam原创 2021-03-02 16:58:14 · 1765 阅读 · 4 评论 -
Java刷题常用API(二)————String
String类的使用一. 构造方法值得注意的是:① 没有将八大类型(无论是基本类型还是包装类型)作为形参的方法,如String(int) 或者String(Double),这提醒我们不要犯像下面的错误:如果真的想要将八大类型转换为String,可以使用String的valueOf()方法:随便点进去看一下:即调用相应包装类的toString()的方法,并且...原创 2019-07-01 10:01:38 · 877 阅读 · 0 评论 -
Java面试基础问题之(三)—— Java的值传递
Java中的数据类型可以归为两大类:基本类型和引用类型,前者不用多说,boolean,byte,char short,int,long,float,double 8种基本类型,后者即为所有的类,当然,数组也可以归为类。基本类型不用讨论,就是值传递(值拷贝),方法中对值的改变不影响原参数的值,下面重点探讨引用类型的参数传递方式。 先看一个例子:测试类:测试类的两个方...原创 2019-07-16 14:14:39 · 255 阅读 · 0 评论 -
Java面试基础问题之(六)—— 不能被继承:final,private,static和构造方法
我们知道,final,private,static和构造方法都是无法被继承的,但是细究起来还是稍有区别,看代码:测试类:Father:同包下子类:来一个一个分析,首先:final方法:很干脆,注释显示:final不能被覆写。private方法:并没有报错,但是回想一下Java修饰符那节:private下,父类的testPrivate()方法对于子类Son...原创 2019-07-16 16:20:37 · 730 阅读 · 0 评论 -
代码优化(一)----- ifelse OR switch
这篇是C的,但是感觉原理上说的很清楚https://www.cnblogs.com/idorax/p/6275259.html简而言之,就像ifesle和switch本身看上去的那样,ifesle要一条条判断,然后找到符合条件的分支,再进入方法体执行;但是switch像是“直接匹配”到对应的case上一样,没有从第一条开始一条条判断。实现原理上,ifesle是顺序执行的cmp,je/jn...原创 2019-07-16 20:34:29 · 204 阅读 · 0 评论 -
Java面试基础问题之(七)—— 方法的重载 VS 覆写规则
一. Java方法声明的众多属性在讨论重载和覆写的区别之前,先补充一下Java方法的背景知识,看下面最为常见的main方法声明,当然为了完整介绍,自行加了异常的抛出:public staticvoidmain(String[] args)throws Exception {...} ① ② ③ ④ ...原创 2019-07-23 20:58:40 · 1473 阅读 · 1 评论 -
经典算法题之(六)------ 二维数组迷宫问题
1.0 无障碍,右下走,代价相等m*n的方格,要求最短路径从左上角到右下角,有多少种走法(有多少条最短路径)?解法一:动态规划,因为是最短路径,所以每一步只能往右或者往下走,那么到第n步(不在第一行或者第一列)只有两种方式:从上往下来的,或者左往右来的。所以可设二维数组:dp[m][n],dp[i][j]即从入口(a[0][0])走到a[i][j]的最短路径数目,容易推知:...原创 2019-07-17 22:40:56 · 9863 阅读 · 3 评论 -
Java字节码
到.class文件目录下javap -c ClassName 粗略信息javap -vClassName 详细信息 (或javap -verbose)javap -pClassName Java官方的反编译版本,更为齐全一些如看enum的实现:IDEA的反编译内容(反编译的.class一般都在out/production目录下):javap -p Sol...原创 2019-08-03 17:53:07 · 155 阅读 · 0 评论 -
Java面试基础问题之(八)—— ==引出的常量池(待补充)
==比较的是大小和内存地址1) 对于基本类型== 比较的就是值,更具体的说,比较的就是基本类型的二进制值(boolean就是false/true),e.g.结果:2) 引用类型== 比较的是内存的地址,e.g.结果:严格说来,这样并不严谨,因为System.out.print()/println()打印引用变量时,默认调用对象的toString()方法...原创 2019-07-23 00:47:42 · 208 阅读 · 0 评论 -
感性认识,看书笔记——红黑树与二叉平衡树
二者都是针对于二叉排序树的缺点——最差可能形成单枝树,失衡,此时查找(新增,删除都是以查找为基础)退化为线性查找——而提出的解决方案:维持一颗相对平衡的二叉排序树。AVL是一个平衡树的理想方案:任意节点的左右子树高度差不超过1但是对于实际应用中,这个条件过于严苛,这样虽然可以保证树非常平衡——查找的复杂度接近logN即二分查找,但是代价就是维护(新增,修改,删除)的开销太大:新增修改或者删...原创 2019-08-27 21:02:51 · 190 阅读 · 0 评论 -
Java面试基础问题之(零)—— Java的平台独立性
首先这个平台独立性指的是硬件无关:这个硬件无关是指字节码级别的硬件无关,即同一个.class文件可以运行在不同的硬件平台上的JVM上。而这个实现原理是,java编译器在编译java程序时并不会分配内存,这个工作会交给具体平台的JVM完成,而不同平台的JVM是不一样的,这样就避免了.class只针对特定平台运行的局限。注:java这一点同C#,.NET一样;而C/C++的跨平台性,可以这么理解:...原创 2020-01-11 13:09:29 · 713 阅读 · 0 评论 -
Java面试基础问题之(一)—— JDK和JRE区别
JDK:JavaDevelopmentKitJava开发包JRE:JavaRuntimeEnvironmentJava运行环境从名字就能看出,JRE是JDK的子集,举个通俗的例子,如果只是想运行.class文件,JRE就够了。但是要想编写运行.java文件,就得要JDK。具体JDK和JRE在组成上的区别可以见下图:Java技术体系图:除了JRE之外,JDK还提供了J...原创 2019-08-28 15:29:36 · 613 阅读 · 0 评论 -
Java面试基础问题之(知识补丁)—— Java中多态的实现方式
Java中多态的实现方式静态多态:重载动态多态:覆写,而覆写有两种方式:继承(多个子类对同一方法的重写)和接口(实现接口并覆盖接口中同一方法)...原创 2019-08-28 18:55:07 · 148 阅读 · 0 评论 -
Java基础知识之(三)—— java的逻辑操作符和位操作符
逻辑操作符:||(与) &&(或) !(非)按位操作符: | (按位与),&(按位或),^(按位异或) 和 ~(按位非)比较有趣的是逻辑运算符和按位运算符的混用问题,可记忆如下:1)& |可以运算boolean量,|| && 却不能运算整数:| & 和|| &&都...原创 2019-09-29 17:32:07 · 157 阅读 · 0 评论 -
Java面试基础问题之(三)—— Java的默认构造方法
一.构造方法不用加返回类型,首字母大写这与类的一般方法有所区别:必须要有返回类型,方法名推荐使用小驼峰法。二. 默认构造方法的访问修饰符继承自类的访问修饰符但是一旦你重载了,就是你写的那个权限,当然地,如果上面都没加,就是default,包权限。注意,如果类的访问修饰符是public,那么四种访问修饰符构造方法都可以使用(只能缩小权限)。这里另注意一个问题:修饰类的访问符就两...原创 2019-06-28 19:56:52 · 1666 阅读 · 0 评论 -
Java面试基础问题之(二)—— Java的四种访问修饰符
一. 一张表一般这种问题都是先摆上一张表,如下: 权限 类内 同包 子类 不 同 包 private ...原创 2019-06-28 13:11:33 · 604 阅读 · 1 评论 -
Java面试常问题目
线程的实现方式:① 继承Thread类(比较笨重,且因为Java只有单继承,拓展性不强,所以不推荐)② 实现Runnable接口(推荐)启动方式Thead thread = new Thread(Runnable实现类);thread.start(); // 执行的是Runnable实现类的run方法)(注:Thread类本身run方法没有任何动作)对应的...原创 2019-06-27 14:08:02 · 220 阅读 · 0 评论 -
int main(int argc,char* argv[])
一 “int”自不必说,是main函数的返回类型,一般来说顺序执行返回0,错误返回1,但是对于main函数不返回值最多也只是warning,不会error,甚至连warning也没有。但是,但是建议对于int main返回一个int值。 二“int argc,char* argv[]”其实从英文名可以知道:argc : argument counter 参数计数器,即参数...原创 2018-06-15 12:45:40 · 3146 阅读 · 0 评论 -
读书笔记——轻量级 Java EE企业应用实战 李刚(4th Edition)
P529 Build Path —— Add Library 是往Eclipse项目里添加库/jar。 其中用户库是可以自定义的,但是在复现P529过程中,创建User Library时,如果勾选了System Library(added to the boot class path): ...原创 2018-10-16 10:05:26 · 473 阅读 · 0 评论 -
Eclipse Tomcat SSH开发常见问题
**********************************************************************************Eclipse中有时子包和父包在同一级,很难受。 方法: ******************************************************************...原创 2018-11-08 13:36:40 · 299 阅读 · 0 评论 -
Java源码之Arrays.sort(Java 8)
Arrays.sort先介绍一下背景知识:基数排序/计数排序/桶排序 radix/base sort,counting sort:1)适用情况:可以简单分为多少个“桶”,不仅是数字也可以是字符串其他分类等等2)每个桶内部可以使用其他排序方法3)特点:以空间换时间 关于快排:1)基本有序时肯定不能用2)规模较小时递归本身产生的开销太大,所以不建议使用...原创 2019-01-03 21:06:50 · 356 阅读 · 0 评论 -
Java源码之Random
import java.util.Random;即util包下有Random类,其包含了很多常用方法常用的有nextDouble() ===> 返回[0,1)之间的随机数(double类型)nextFloat() ===> 返回[0,1)之间的随机数(float类型)nextInt(n) ===> 返回[0,n)之间的整数这些方法都不是静态的!!,所以得先创建Ra...原创 2019-01-23 17:32:40 · 768 阅读 · 0 评论 -
Java刷题————Java的零星使用(一)
带label的break和continue**********************************************************************************其实上面例子已经很清晰了,不过找到带label的和不带label的联系,或者一致性,这样更方便其作用:最原始的b...原创 2019-03-01 15:35:57 · 21641 阅读 · 0 评论 -
Java刷题————Java的零星使用(二)
目录Java的值传递Java对象引用的参数传递Java数组引用的参数传递LinkedList.toArray()LinkedList.toArray()源码:故建议使用第二种方式:1) 推荐使用2) Java只有值传递刷题时,LinkedList的使用Java为不同的数据结构提供了不同的API,一定要根据需要使用正确的API!!L...原创 2019-04-05 14:41:15 · 343 阅读 · 1 评论 -
Java刷题常用API(一)———— Scanner从屏幕读入数据(待补充)
目录1)Scanner类位置2)Scanner.next()使用:① next() 方法默认的token分隔符(delimiter)为 “空格、回车和tab”② 如果输入的第一个字符就是分隔符(空格、回车和tab),则会“忽略”:③ 方法第三点的说明:阻塞问题(待补充)④ 可以使用Scanner.useDelimiter()指定特定的String作为分隔符⑤ nextX...原创 2019-04-09 09:50:25 · 756 阅读 · 0 评论 -
Java刷题————Arrays
一. Arrays在java.util包下,也符合它的定位——关于数组的工具类:1)Arrays.fill()fill() 方法应该是最常用的方法,特别是int类型数组的整体赋值,e.g.但其实它有多个重载版本,包括给对象数组赋值:为了方便,我们直接看“父版本”的实现,很简单:相当于Arrays帮你写好的一个for循环而已,填进去数组名和想赋的值即可,e.g...原创 2019-04-09 22:18:39 · 272 阅读 · 0 评论 -
Java刷题————Java的零星使用(四)
while(i++ < Len)*************************************************************************************************************************************************这种语法只能计数用,千万不要在while中使用i...原创 2019-04-09 22:18:56 · 160 阅读 · 0 评论 -
经典算法题之(二)------ 二叉树题型总结
非递归版本的三种遍历方式:求符合某一条件的节点的数目:应该算是二叉树的最基本题目显然,不论采用递归还是非递归版本,无论是先序,中序还是后序方式,思路是一样的,设一全局计数量--count在访问节点处放置判断条件,若符合条件则count++这可以有无数个变式:求节点个数(相当于限制条件为空) 求值等于/小于/大于x的节点个数 求叶子节点数 求只有...原创 2019-06-25 19:36:17 · 215 阅读 · 0 评论 -
Java面试基础问题之(四)—— 类的初始化顺序
先放结论:静态 > 大于非静态父类 > 子类一个类初始化中,构造方法最后具体说来:父类静态代码块 --> 子类静态代码块(--> 父类非静态代码块-->子类非静态代码块 --> 父类构造方法 --> 子类构造方法)1)打括号的是创建子类对象才会进行的步骤2)静态变量的声明和初始化都归结为静态代码块中了,相应地,...原创 2019-07-02 11:33:02 · 136 阅读 · 0 评论 -
读书笔记——java从入门到精通的笔记(4th Edition)
*************************************************************************线程:Thread /θred/先看“多任务”(multitasking):同时开多个程序:电脑挂着qq,听着音乐,浏览网页。。。线程是在较低层次上拓展了多任务的概念:一个程序执行多个任务,通常每个任务称为一个线程(Thread...原创 2018-08-14 17:05:10 · 377 阅读 · 0 评论