java基础

Java递归

天大地大妈咪最大 提交于 2020-11-06 04:46:25
package bishi; public class Digui { // 递归算法1 // 一个整数,大于0,不能使用循环和本地变量, // 按照n,2n,4n,8n的顺序递增输出, // 当值大于5000时,把值按照倒序继续输出来 private static void doubleNum(int n) { System.out.println(n); if (n < 5000) { doubleNum(n * 2); System.out.println(n); } } /** * 递归函数的执行过程具有三个特点: 1、函数名相同 2、不断地自调用 3、最后被调用的函数要最先被返回 */ // 递归算法2 // 第1个人10,第2个比第1个大2岁, // 依次递推,请用递归方式计算出第8个人多大 private static int computeAge(int n) { if (n == 1) return 10; return computeAge(n - 1) + 2; } public static void main(String[] args) { doubleNum(845); System.out.println(computeAge(8)); } } 来源: oschina 链接: https://my.oschina.net/u/272318/blog

java基础(一)

送分小仙女□ 提交于 2020-02-29 03:35:49
阅读目录 1 throws与throw的区别 2 collection接口与map接口 3 list与set的区别 4 list都有哪些实现 5 如何创建线程对象 6 什么是泛型,作用? 7 自动装箱?拆箱? 1 throws与throw的区别 解析:throws和throw是异常处理时两个常见的关键字,初级程序员常常容易正确理解throw和throws的作用和区别,说明已经能比较深入理解异常处理。Throw用来抛出异常,如果执行了throw语句,程序将发生异常,进入到异常处理机制。Throws用来声明异常,说明这个方法可能会发生某些类型的异常,那么编译器将强制在调用这个方法的时候处理异常。API中的很多方法都使用了throws声明了异常,所以使用这些方法时编译器会提示需要处理异常。 参考答案:throw用来在方法体内抛出异常,而throws用来在方法声明处声明异常。这两个关键字有着一定的联系。如果一个方法中使用了throw关键字抛出了异常,那么要么立即用try/catch语句进行捕获,要么就是用throws进行声明,否则将出现编译错误。然而, 并不是只有使用了throw关键字之后才能使用throws关键字,语法上来说,任何一个方法都可以直接使用throws关键字,抽象方法也可以使用。 回到顶部 2 collection接口与map接口 解析

Java基础知识拾遗补缺

落爺英雄遲暮 提交于 2019-12-10 09:58:04
最近要换工作,明天就要去面试,还是长沙一家不错的公司,赶紧看看面试蹄,查漏补缺,希望可以通过面试。 这里先记录下复习过程中碰到的知识点,主要是自己感觉很重要又不记得的。 一个数的正与负之间的转换? --最容易想到的方式是乘以-1,但这不是最佳答案,Java提供了取反操作符 ~,取反加1就可以取得它的相反数 finally 语句块前有return语句,finally会不会执行? --比如:try{ return; }catch(){} finally{return;} 或者 try{ return;}catch(){return;} finally{return;} 结果是无论前面有没有return语句,finally都会被执行,如果finally里还有return,那么程序提前退出了,不会执行try或者catch里面的return。 下面是个测试例子 执行的结果让人有点意外,不是3,而是2,原因是在return 之前,程序把返回的值保持在一个局部变量里面,执行完finally语句后再返回之前保存的值,finally里的修改不起作用。 3.String str = new String("abc"); 我们知道这段代码一共创建了两个对象,一个是用文本方式 创建的对象"abc",另外一个是new String( )创建的对象. 来源: oschina 链接: https://my

Java 的基本数据类型

ε祈祈猫儿з 提交于 2019-12-05 18:42:27
变量就是申请内存来储存值,创建变量,需要在内存中申请空间。内存管理系统会根据变量的类型分配存储空间。并且定义不同类型的变量,可以在内存中储存整数,小数,字符。 Java提供4类8种基本数据类型 类型名称 字节空间 使用场景 范围 默认值 整型: byte 1字节(8位) 存储字节数据(较常用) 127~-127 0 short 2字节(16位) 存储短整型数据(很少用) 32768~-32768 0 int 4字节(32位) 存储普通整型数据(常用) 21亿~-21亿 0 long 8字节(64位) 存储长整型数据(常用) 2^63-1~-2^63 0L 浮点型 float 4字节(32位) 存储浮点型数据(不常用) 最大值:3.4028235E38=340282350000到38位 最小值:1.4E-45=0.000...14到45位 0.0f double 8字节(64位) 存储双精度浮点型数据(常用) 最大值:1.7976931348623157E308 最小值:4.9E-324 0.0d 布尔型 boolean 1字节(8位) 存储逻辑变量(常用) true/false fasle 字符型 char 2字节(16位) 存储一个16位Unicode字符 一个字符存一个中文汉字 一个中文含2个字节 最大值:“\uffff”(为65535) 最小值:“\u0000”(为0)

025.2 正则表达式 练习

易管家 提交于 2019-12-02 20:44:57
内容:对IP地址切割然后按数字排序;判断是不是邮箱;爬一个页面获取里面的邮箱地址 //#########练习1 对一段IP地址切割排序 private static void ipsort() { String ip_source = "192.168.1.200 17.10.10.12 3.3.46.1 127.0.0.1"; //ip每段前面补两个0 ip_source = ip_source.replaceAll("(\\d+)", "00$1"); System.out.println(ip_source); //保留每段后面的3位 ip_source = ip_source.replaceAll("0*(\\d{3})", "$1"); System.out.println(ip_source); String[] ips = ip_source.split(" +"); Arrays.sort(ips); for(String ip : ips){ System.out.println(ip.replaceAll("0*(\\d+)", "$1")); } } //############## 判断是不是邮箱地址 private static void checkMail() { String mail = "abc123@sina.com"; String regex

ClassNotFoundException和NoClassDefFoundError的区别

倖福魔咒の 提交于 2019-12-01 21:17:34
正如它们的名字所说明的: NoClassDefFoundError是一个错误(Error),而ClassNOtFoundException是一个异常 ,在Java中错误和异常是有区别的,我们可以从异常中恢复程序但却不应该尝试从错误中恢复程序。 ClassNotFoundException的产生原因: Java支持使用Class.forName方法来动态地加载类,任意一个类的类名如果被作为参数传递给这个方法都将导致该类被加载到JVM内存中,如果这个类在类路径中没有被找到,那么此时就会在运行时抛出ClassNotFoundException异常 。 要解决这个问题很容易,唯一需要做的就是要确保所需的类连同它依赖的包存在于类路径中。当Class.forName被调用的时候,类加载器会查找类路径中的类,如果找到了那么这个类就会被成功加载,如果没找到,那么就会抛出ClassNotFountException,除了Class.forName,ClassLoader.loadClass、ClassLOader.findSystemClass在动态加载类到内存中的时候也可能会抛出这个异常。 另外还有一个导致ClassNotFoundException的原因就是:当一个类已经某个类加载器加载到内存中了,此时另一个类加载器又尝试着动态地从同一个包中加载这个类。

jdk源码(二):你知道ConcurrentHashMap的具体实现细节吗?

白昼怎懂夜的黑 提交于 2019-11-29 19:35:28
1、首先抛出几个问题(文章最后有答案): a、ConcurrentHashMap在put的时候,key经过几次hash计算? b、segment 会增大吗? c、新的值是放在链表的表头还是表尾? 2、ConcurrentHashMap是如何存储数据的? 先看图: 从图中我们可以看出ConcurrentHashMap有两个种数据结构:数组和单向链表 那ConcurrentHashMap和如何存放一对key和value呢? put的具体过程: a、根据key计算hash值 b、根据hash值找到segment数组的下标 c、根据上面的下标获取tab数组, d、根据hash值,获取tab数组的下标 c、如果tab当前下标位置上没有值,就直接把存储有key和value的HashEntry存放在tab的当前下标下,否则就是形成一个链表(解决了Hash值冲突) 这就是整个put的大概过程。 是不是有小伙伴说,裤子都脱了,你给我看这个?哈哈哈哈哈,好,上代码 public V put(K key, V value) { Segment<K,V> s; if (value == null) throw new NullPointerException(); int hash = hash(key); // 根据key获取hash值 int j = (hash >>> segmentShift) &

怎样学习java,漫谈java学习之路

三世轮回 提交于 2019-11-29 05:18:22
Java - 近10年来计算机软件发展过程中的传奇,其在众多开发者心中的地位就如“屠龙刀”、“倚天剑”。 Java是个平台,我只想说说我对学好Java的一点看法,希望对初学者有所帮助。 1. 思考一下 学习Java之前,先别急,静下心来好好想想: 1)你对学习Java是否有兴趣? 2)你是否能静下心来坚持不懈地学习? 嗯,这是个容易但又绝对不应该忽略的问题,你确信自己对Java感兴趣、而且又有吃苦的准备,那你才可能学好Java!如果具备这两点条件,就请继续往下看…… 2. 准备一下 请不要把你的学习Java之路和其它计算机技术分开看待,技术的联系往往是千丝万缕的,你应该掌握一些学习Java所涉及的基础知识,对于 “CLASSPATH要怎么设置啊”、“求JDK下载地址”等等问题,你不该问,因为Internet上太多答案了,甚至换个角度说,你是不是还不适合直接学习编程? 1)买本Java学习用书。 JDK 6正式版刚刚推出,市面上你暂时买不到JDK 6的书籍,但我仍推荐你买一本适合入门的、较新JDK版本的Java书籍,那么,你现在选择一本讲述JDK 5的入门书籍还是有条件的。我可以推荐一些入门书,但是我不打算这么做,因为合我口味的,不一定适合你。但无论如何,《Thing In Java》绝对不应该作为你入门Java的第一本书籍! 记住,网络上学习Java的资源很多,但基本不够系统