
java学习笔记
seabearlmx
计算机视觉
展开
-
java解惑之字符之谜(谜题13)
谜题13:动物庄园来看下面的java程序将会打印什么?public class AnimalFarm{public static void main(String[] args){final String pig = "length: 10";final String dog = "length: " + pig.length();System.out.println("A原创 2015-01-07 09:28:13 · 487 阅读 · 0 评论 -
java解惑之表达式之谜(谜题6)
谜题6:多重转型当程序连续使用多个转型时,会发生什么呢?看下面示例代码:public class Multicast{public static void main(String[] args){System.out.println((int)(char)(byte) -1);}}转换的顺序是从开始的int数值转为byte,再转为char,最后又转回int。那么最后打印原创 2014-12-31 21:24:55 · 452 阅读 · 0 评论 -
java解惑之表达式之谜(谜题9)
谜题9:半斤该谜题仅有两行代码:x+=i; //合法x = x + i; //不合法对于上面的两个表达式,我们通常都认为第一个表达式是第二个表达式的简写方式,但这并不准确。这两个表达式都被称为赋值表达式。第二个表达式使用的是简单赋值操作符(=),而第一个表达式使用的是复合赋值操作符。在java语言规范中提到,复合赋值等价于简单赋值 E1 = (T)((E1) op (E原创 2015-01-03 11:03:05 · 496 阅读 · 0 评论 -
java解惑之表达式之谜(谜题7)
谜题7:互换内容下面这个程序使用了复合的异或赋值操作符,它展示的技术师一种编程习俗,那么它会打印什么呢?public class CleverSwap{public static void main(String[] args){int x = 1984; //0x7c0int y = 2001; //0x7d1x^=y^=x^=y;System.out.p原创 2015-01-01 20:05:39 · 494 阅读 · 0 评论 -
java解惑之表达式之谜(谜题8)
谜题8: Dos Equis这个谜题将测试你对条件操作符(冒号问号操作符)的掌握程序,看下面的程序会打印出什么结果?public class DosEquis{ public static void main(String[] args){ char x = 'X'; int i = 0; System.out.println(true ? x : 0);原创 2015-01-02 12:44:02 · 463 阅读 · 0 评论 -
java解惑之表达式之谜(谜题10)
谜题10:八两与谜题9相反,给出变量x和i的声明,使用如下的语句合法:x = x + i;而下面这条语句是不合法的:x += i;所以和之前的谜题9一样,这个谜题也是有关复合赋值操作规范的细节。基于谜题9,我们知道了复合赋值操作符比简单赋值操作符的限制更少,在一般情况下,这是对的。但是有这么一个领域,在其中简单赋值操作符更宽松。复合赋值操作符要求两个操作数都是原生类型的,例原创 2015-01-04 12:31:24 · 470 阅读 · 0 评论 -
java解惑之字符之谜(谜题11)
谜题11:最后的笑声来看下面这段程序将打印什么?public class LastLaugh{public static void main(String[] args){System.out.print("H" + "a");System.out.print('H' + 'a');}}该程序看起来好像是用两种方式连接了H和a,那么你会认为这个程序将会打印HaHa。原创 2015-01-05 10:22:45 · 454 阅读 · 0 评论 -
java解惑之字符之谜(谜题12)
谜题12:ABC来看下面这个程序会打印什么内容?public class Abc{public static void main(String[] args){String letters = "ABC";char[] numbers = {'1','2','3'};System.out.println(letters + "easy as " + numbers);}原创 2015-01-06 10:41:21 · 493 阅读 · 0 评论 -
《深入理解java虚拟机》学习笔记之java内存模型总结
在深入理解java虚拟机中有句话写道:Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来。 在学习java的过程中,最常提到的便是堆和栈,除此之外还有方法区。下面我们来看看Java虚拟机运行时的数据区分布: 1.方法区(Method Area)2.堆(Heap)3.虚拟机栈(VM Stack)4原创 2015-11-09 11:36:32 · 552 阅读 · 0 评论 -
Java中String.intern()方法详解
String.intern()是一个Native方法,它的作用是:如果字符串常量池中已经包含了一个等于此String对象的字符串,则返回代表池(运行时常量池)中这个字符串的String对象;否则,将此String对象包含的字符串添加到常量池中并且返回此String对象的引用。此方法在jdk1.6和jdk1.7中有差异,下面来看段代码: String str1 = new StringBuil原创 2015-11-09 12:14:42 · 4684 阅读 · 4 评论 -
《深入理解Java虚拟机》学习笔记之垃圾收集器总结
垃圾收集(GC)技术是Java与C++之间的一堵高墙,大部分人可能会认为GC是Java语言的伴生产物。事实上,GC的历史远比Java要久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。通常,要了解GC,其实就是要了解GC需要完成的三件事:1.哪些内存需要回收?2.什么时候回收?3.如何回收?目前垃圾收集技术已经相当成熟,一切看起来都进入了“自动原创 2015-11-11 10:53:12 · 866 阅读 · 2 评论 -
《深入理解Java虚拟机》学习笔记之类加载机制总结
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。其中验证、准备、解析3个部分统称为连接。如下图:类加载的7个阶段已经知道了,那什么情况下需要开始类加载过程的原创 2015-11-16 12:41:53 · 833 阅读 · 0 评论 -
《深入理解java虚拟机》学习笔记之虚拟机字节码执行引擎
本篇博客主要总结一下虚拟机字节码执行引擎中方法调用的相关内容。 方法调用并不同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本,暂时不涉及方法内部的具体运行过程。那么一说到确定被调用方法的版本,很自然的就知道这部分内容与多态相关,说具体点就是方法的重载和重写。 所有的方法调用中的目标方法在Class文件里面都是一个常量池中的符号引用,在类加载的解析阶段,会将其中的一部分符原创 2015-11-23 12:03:49 · 543 阅读 · 0 评论 -
java解惑之表达式之谜(谜题5)
谜题5:十六进制的趣事谜题由两个十六进制的常量相加而来,下面来看看示例程序代码:public class JoyOfHex{public static void main(String[] args){System.out.println(0x100000000L + 0xcafebabe);}}看似简单的相加计算打印出来的应该是1cafebabe,其实不然。该程序使用原创 2014-12-30 23:23:03 · 489 阅读 · 0 评论 -
java解惑之表达式之谜(谜题4)(
谜题4:初级问题问题由下面简单的代码引发:public class Test{ public static void main(String[] args){ System.out.println(12345 + 5432l); }}咋一看,打印的结果是66666,而实际上输出的是17777,原因就是数字1和小写字母l,5432l是指long型原创 2014-12-29 22:24:44 · 423 阅读 · 0 评论 -
java解惑之字符之谜(谜题14)
谜题14:转义字符的溃败我们来看下下面的程序,使用了两个Unicode的转义字符,它们是用其十六进制代码来表示Unicode字符,那么,这个程序会打印什么呢?public class EscapeRout{public static void main(String[] args){System.out.println("a\u0022.length原创 2015-01-08 18:26:13 · 442 阅读 · 0 评论 -
java解惑之字符之谜(谜题15)
谜题15:令人晕头转向的Hello来看下面这个老生常谈的程序会打印什么?/**Generated by the IBM IDL-to-java compiler,version 1.0*from F:\TestRoot\apps\a1\units\include\PolicyHome.idl*Wednessday,June 17,1998 6:44:40 o'clock AM GMT原创 2015-01-09 10:51:20 · 616 阅读 · 0 评论 -
java解惑之字符之谜(谜题16)
谜题16:行打印程序行分隔符是为分割文本行的字符或字符串而起的名字,并且在不同平台上它是存在差异的。在windows平台上,它由CR字符(回车)和紧随其后的LR(换行)字符组成。在UNIX平台上,通常引用单独的LF字符作为换行字符。那么,这次的谜题也就由行分隔符引出,来看看下面这个将LF字符传递给println方法的程序会打印什么,它的行为是否依赖于平台?public class Line原创 2015-01-10 11:25:41 · 520 阅读 · 0 评论 -
java解惑之字符之谜(谜题17)
谜题17:嗯?下面的是一个合法的java程序吗?如果是,它会打印什么呢?\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020\u0020\u0063\u006c\u0061\u0073\u0073\u0020\u0055\u0067\u006c\u0079\u007b\u0070\u0075\u0062\u006c\u0069原创 2015-01-11 21:36:46 · 1222 阅读 · 0 评论 -
java解惑之字符之谜(谜题18)
谜题18:字符串奶酪 下面这个程序从一个字节序列创建一个字符串,然后迭代遍历字符串中的字符,并将它们作为数字打印。请描述程序打印的数字序列:public class StringCheese{ public static void mian(String[] args){ byte bytes[] new byte[256]; for(int i = 0; i <原创 2015-01-12 13:45:16 · 575 阅读 · 0 评论 -
java解惑之字符之谜(谜题19)
谜题19:漂亮的火花(块注释符) 下面的程序用一个方法对字符进行了分类。这个程序会打印什么呢?public class Classifier{ public static void main(String[] args){ System.out.println(classify('n') + classify('+') + classify('2')); } sta原创 2015-01-13 10:19:17 · 455 阅读 · 0 评论 -
java解惑之表达式之谜(谜题1)
谜题1:奇偶性public static boolean isOdd(int i){ return i % 2 == 1;}isOdd方法的目的是确定其惟一的参数是否为奇数,那么,这个方法是否和想象中的一样可行?奇数可定义为被2整除余数为1的整数。表达式i%2计算的是i除以2时所产生的余数,因此看起来这个程序应该是可行的。遗憾的是,对于所有的正数来说,这个方法是没有任何问原创 2014-12-25 15:45:19 · 651 阅读 · 0 评论 -
java解惑之字符之谜(谜题20)
谜题20:我的类是什么 来看一个打印其类文件名称的程序:package com.javapuzzlers;public class Me{ public static void main(String[] args){ System.out.println(Me.class.getName().replaceAll(".","/") + ".class"); }}原创 2015-01-14 14:11:04 · 670 阅读 · 0 评论 -
java解惑之表达式之谜(谜题2)
java解惑之谜题2:找零时刻谜题由下面这段话所描述的问题引出:Tom在一家汽车配件商店购买一个价值1.10美元的火花塞,但是他钱包中都是两美元一张的钞票。如果他用一张两美元的钞票购买这个火花塞,那么应该找给他多少零钱呢?那么,我们来看一个解决上述问题的程序:public class change{public static void main(String[] args){原创 2014-12-27 15:02:08 · 465 阅读 · 0 评论 -
java解惑之字符之谜(谜题21)
谜题21:我的类是什么?镜头2 下面的程序所要做的事情正是前一个谜题所做的事情,但是它没有假设斜杠符号就是分隔文件名组成部分的符号。相反,该程序使用的是java.io.File.separetor,它被指定为一个公共的String域,包含了平台相关的文件名分隔符。这个程序会打印正确的、平台相关的类文件名吗?该程序是从这个类文件中被加载的。package com.javapuz原创 2015-01-15 14:16:22 · 601 阅读 · 0 评论 -
java解惑之字符之谜(谜题22)
谜题22:URL的愚弄 本谜题利用了一个java编程语言中一个鲜为人知的特性。请考虑下面的程序将会做什么?public class BrowerTest{ public static void main(String[] args){ System.out.ptintln("iexplore"); http://www.google.com; System.out原创 2015-01-16 21:12:47 · 815 阅读 · 0 评论 -
java解惑之表达式之谜(谜题3)
谜题3:长整除该谜题涉及两个long型数值进行整除,所以称为长整除。先看看典型代码:public class LongDivision{ public static void main(String[] args){ final long MICROS_PER_DAY = 24*60*60*1000*1000; final long MILLI原创 2014-12-28 18:58:17 · 606 阅读 · 0 评论 -
Java实现监听USB插入
想用Java实现监听USB端口是否有移动设备插入,然后操作移动设备内的文件。网站查找资料后发现有个jsr-80的项目,下面先介绍一下什么是JSR:JSR是Java Specification Requests的缩写,意思是Java 规范请求。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和原创 2015-11-25 11:55:50 · 13521 阅读 · 1 评论