
Java编程思想
珠峰之巅-程序员
这个作者很懒,什么都没留下…
展开
-
15.4:泛型化方法
指导:无论何时,只要你能够做到,尽量使用泛型化方法。如果泛型化方法可以取代整个类的泛型化,那么久应该使用泛型化方。public class GenericMethod{ public void f(T x){ system.out.println(x.getclass().getName());}public static void main(Strin原创 2016-05-13 15:11:58 · 464 阅读 · 0 评论 -
21.3.3 原子性与易变性 21.3.4 原子类
原子操作是不能被线程集中中断的操作。原子性可以应用于除long和double之外的素有基本类型,jvm将64位的读取和写入当做两个分离的32位操作来执行,产生一个读取和写入操作中间发生上下文切换,导致不同人物可以看到不正确结果的可能性。volatile关键字还确保了应用中的可视性,如果将一个域声明为volatile的,那么只要对这个域产生了写操作,所有的读曹组就都可以看到这个修改。如果一个原创 2016-06-01 22:03:07 · 736 阅读 · 0 评论 -
16.1数组为什么特殊
数组使用[]来访问元素,但是容器使用add()和get()来访问元素,16.2 数组是第一级对象length是只读的变量,数组必须初始化,为初始化的钱,编译器不允许用此引用做任何的事情。新生的一个数组对象是,其中所有的引用被自动初始化为null。基本类型的数组如果是数值类型,被自动初始化为0。如果是字符类型被初始化为(char)0.如果是布尔类型,被自动初始化为false.16.3 多原创 2016-05-23 14:10:21 · 348 阅读 · 0 评论 -
16.6 创建测试数据
反射方法getClasses()可以生成所有的嵌套类,而test()fa16.6.3 从Generator中创建数组 需要两个转换工具,第一个工具是使用任意的Generator来产生Object子类型的数组,第二个工具接收任意基本类型的包装器类型数组,并产生相应的基本类型数组。1.public static T[] array(T[] a,Generator gen){ r原创 2016-05-23 14:39:39 · 434 阅读 · 0 评论 -
Java题库
1.join等待其他的完成后执行2.exceptionstatemoniter不是当前线程的持有对象3.illegalThreadStateException:运行的时候发现在循环第二遍的时候出现了java.lang.IllegalThreadStateException异常通过上网查询发现同一个Thread不能重复调用start方法,做如下修改就好了:将自己定义的HubRobot原创 2016-08-07 11:04:35 · 1681 阅读 · 0 评论 -
java题库2
1.numberformat nf。 nf.format(). nf.parse();2.filewriter具有的功能: 写一个line separator to an open stream3.renameto renameTo可以用来给File改名字,改路径 他需要的参数也是一个File对象,表示要把当前文件重命名(移动原创 2016-08-07 15:21:31 · 386 阅读 · 0 评论 -
finalize
基本预备相关知识 对象的销毁过程 对象重生的例子 对象的finalize的执行顺序 何时及如何使用finalize 参考 基本预备相关知识 1 java的GC只负责内存相关的清理,所有其它资源的清理必须由程序员手工完成。要不然会引起资源泄露,有可能导致程序崩溃。 2 调用GC并不保证GC实际执行。 3 finalize抛出的未捕获异常只会导致该对转载 2016-08-07 15:22:24 · 681 阅读 · 0 评论 -
java题库
1.public class T {int squares=81;public static void main(String[] args) {new T().go();}void go(){incr(++squares);System.out.println(squares);}void incr(int squares){squares+=10;}原创 2016-08-07 16:49:56 · 778 阅读 · 0 评论 -
java题库4
1. 由于等待一个锁定线程只有在获得这把锁之后,才能恢复运行,所以让持有锁的线程在不需要锁的时候及时释放锁是很重要的。在以下情况下,持有锁的线程会释放锁: 1. 执行完同步代码块。 2. 在执行同步代码块的过程中,遇到异常而导致线程终止。 3. 在执行同步代码块的过程中,执行了锁所属对象的wait()方法,这个线程会释放锁,进行对象的等待池。 除了以上原创 2016-08-07 17:08:46 · 369 阅读 · 0 评论 -
java5题库
原文:http://blog.youkuaiyun.com/luoweifu/article/details/46613015 作者:luoweifu 转载请标名出处《编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程》一文详细讲述了线程、进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础。本文将接着讲一下Java线程同步中的一个重要的概念synchronized.原创 2016-08-07 22:50:55 · 578 阅读 · 0 评论 -
java6题库
1. void notifyAll()解除所有那些在该对象上调用wait方法的线程的阻塞状态。该方法只能在同步方法或同步块内部调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。void notify()随机选择一个在该对象上调用wait方法的线程,解除其阻塞状态。该方法只能在同步方法或同步块内部原创 2016-08-08 00:19:15 · 659 阅读 · 4 评论 -
java题库5
1. java.util.Locale类对象表示了特定的地理,政治和文化地区。 以下是有关区域设置的要点:需要Locale来执行其任务的操作称为语言环境敏感,它使用Locale,形成信息的用户。Locale是一种机制,用于识别对象,而不是一个容器对象本身.获取Locale使用getdefaultLocale2. 父类的私有成员变量,无法通过super原创 2016-08-08 11:43:27 · 342 阅读 · 0 评论 -
java题库5
1.这就是java的重写规则。 对于异常重写方法不能抛出新的异常或者比被重写方法声明的检查异常更广的检查异常。但是可以抛出更少,更有限或者不抛出异常。,异常被继承了下来,子类调用时必须处理异常或者向上抛出异常。2. break+label:用于跳出多重循环3用法总结与注意事项: 1)在函数开始处检验传入参数的合法性 如: 1 int reset原创 2016-08-08 15:27:58 · 430 阅读 · 0 评论 -
java题库8
1.一个没有实现Serializable接口的父类,编写一个能够序列化的子类 ,只要父类实现了序列化的接口,或者,子类实现了序列化的接口就可以序列化“transient”——“瞬态”,先不说这个翻译是否恰当,这个变量关键字一直不曾使用,简单的说就是被瞬态定义的变量不可序列号。或者这么给他换个名字——“不可序列化状态”。打个比方,如果一个用户有一些敏感信息(譬如密码,银行卡号等),为了安原创 2016-08-08 15:56:39 · 856 阅读 · 0 评论 -
java题库10
1. 可变参数的使用规则: 1.最后一个参数,前不能由非可变参数 2.如果有同名的非可变参数函数,优先匹配 3.如果有两个可以匹配的可变参数函数,错误2.static final int[] a = { 100,200 };B.static final int[] a; static { a=new int[2]; a[0]原创 2016-08-08 17:21:52 · 813 阅读 · 0 评论 -
21.3 共享受限的资源
21.3.1 不正确的访问当有两个或更多的任务竞争响应某个条件,产生冲突或不一致结果21.3.2 解决共享资源竞争java提供了关键字synchronize来保护代码片段,当任务要执行被synchronize关键字保护的代码片段的时候,它将检查锁是否可用,然后获取锁,执行代码,释放锁。当在对象上调用器任意synchronize方法时候,此对象都被加锁,这时对象上的其他syn原创 2016-06-01 20:46:47 · 304 阅读 · 0 评论 -
12.2.12 创建有响应的用户界面 捕获异常
1.一个关注与运算,不能读取控制台的输入;另一个把运算放在任务里单独运行,此时就可以在运算的同时监听控制台的输入。把运算的任务放在一个单独的线程里、 修改Executor产生线程的方式,Thread.UncaughtExceptionHandler 允许在每个Thread对象上都扶着一个异常处理器。Thread.uncaughtexceptionhandler.uncaughtexcepti原创 2016-06-01 20:30:28 · 334 阅读 · 0 评论 -
15.17 对缺乏潜在类型机制的补偿
15.17.1 反射 可以使用反射来解决潜在的类型机制。 class Mime{ public void walkAgainstTheWind()} public void sit(){print(") }class SmartDog{ public void speak(){print("Woof")}}class Communicate原创 2016-05-18 16:03:28 · 545 阅读 · 0 评论 -
15.4.1 杠杆利用类型参数推断
工具类: public class New{ public static Map map(){ return new Hashmap();}public static LinkedList list(){ return new LinkedList();}}类型推断只是对付值操作有效,如果你将一个泛型化方法调用结果原创 2016-05-13 15:22:42 · 679 阅读 · 0 评论 -
15.4.2:可变参数与泛型化方法
泛型化方法与可变参数列表能够很好的共存:pubic class GenericVarags{ public static List makeList List restult=new ArrayList(); for(T item:args){ result.add(item); return result;}}}原创 2016-05-13 15:26:25 · 317 阅读 · 0 评论 -
15.4.3 用于Generator的泛型方法
利用生成器,可以方便的填充一个Collection,而泛型化pubilc class Generators{ public static Collection fill(Collection coll,Generator gen,int n){ for(int i=0;i原创 2016-05-13 15:47:20 · 321 阅读 · 0 评论 -
15.4.5 简化元组的使用
public class Tuple{ public static TwoTuple tuple(A a,B b){ return new TwoTuple(a,b);}}public class TupleTest2{ static TwoTuple f(){ return tuple("hi",47);}}原创 2016-05-13 15:53:47 · 335 阅读 · 0 评论 -
15.4.6 一个Set实用工具
java实现交并差原创 2016-05-13 16:02:22 · 391 阅读 · 0 评论 -
15.5 匿名内部类
泛型还可以用于内部类以及匿名内部类class Customer{ private static long counter=1; private final long id=counter++; private Customer(){} public String toString(){return "Customer"+id;}原创 2016-05-13 16:37:21 · 278 阅读 · 0 评论 -
15.7 擦除的神秘之处
尽管可以声明ArrayList.class但是不能声明Arraylist.classc1=new ArrayList().getclass();c2=new Arraylist.getclass(); c1=c2;他们是相同的类型在泛型的内部,无法获得任何有关泛型参数类型的信息。可以使用extends,如T extends hasF等,类型参数的擦除原创 2016-05-13 16:55:21 · 289 阅读 · 0 评论 -
擦除
Java泛型-类型擦除一、概述 Java泛型在使用过程有诸多的问题,如不存在List.class, List不能赋值给List(不可协变),奇怪的ClassCastException等。 正确的使用Java泛型需要深入的了解Java的一些概念,如协变,桥接方法,以及这篇笔记记录的类型擦除。Java泛型的处理几乎都在编译器中进行,编译器生成的bytecode是不包涵泛型信息的,转载 2016-05-15 21:32:13 · 479 阅读 · 0 评论 -
5.8.1 创建类型实例
在Erased.java中对创建一个new T()的尝试无法实现,部分原因是擦除,另一部分原因是编译器不能验证T具有默人构造函数。但是在C++中,可以很安全。Java中的解决方案是传递一个工厂对象,并使用它来创建新的实例。最便利的工厂对象就是Class对象,因此如果使用类型标签,可以使用newInstance()来创建这个类型的新对象:class ClassFactory{ T x;原创 2016-05-16 20:19:03 · 338 阅读 · 0 评论 -
15.8.2 泛型数组
不能创建泛型数组,在任何想要创建泛型数组的地方使用Arraylist。既然所有的数组无论他们持有的类型如何,都具有相同的结构,那么看起来能够创建一个Objecet数组,并将其转型为所希望的数组类型,可以编译但是不能运行。Object[] array;(T[])array;尝试经Object[]转型为T[],仍旧是不正确的,经产生警告,在运行时产生异常。15.9 边界边界可以原创 2016-05-16 20:41:29 · 276 阅读 · 0 评论 -
15.10
class Fruit{}class Apple extends Fruit{}Fruit[] fruit=new Apple[10];fruit[0]=new Apple();//0kfruit[0]=new Fruit()//exception runtimeList flist=new ArrayList();//不能将一个Apple的容器赋值给一个Fruit容器转载 2016-05-16 21:20:05 · 408 阅读 · 0 评论 -
15.10.4 捕获异常
一种特殊情况下需要使用 而不是原生类型,如果需要想一个使用的方法传递原生类型,那么对编译器来说,可能会推断出实际的类型参数,使得这个方法可以回转并调用另一个使用这个确切类型的方法。static void f2(Holer holder){ f1(holder);//call with captured type}Holer raw=new Holder(1);Hol转载 2016-05-16 21:36:37 · 357 阅读 · 0 评论 -
15.11 问题
1.任何基本类型都不能作为类型参数2. 实现参数化接口,一个类不能同时实现同一个泛型接口的两种变体,由于擦除的原因,两个变体会成为相同的接口interface Payable{}class Employee implements Payable{}class Hourly extends Employee implements Payable{}Hourly不能编译,因为擦除原创 2016-05-18 15:21:18 · 532 阅读 · 0 评论 -
15.3 动态类型安全
1.Collection.checkedList(new Arraylist,Dog.class) 当类型不一致时产生,抛出一个异常。2.异常由于擦除的原因,将泛型应用异常时非常受限的,catch语句不能捕获泛型类型的异常,因为在编译器和运行时都必须知道异常的确切类型。泛型类也不能直接或间接继承自Throwable。3.使用装饰器模式装饰器模式使用分层对象来动态透明的想当个对象添原创 2016-05-18 15:52:38 · 412 阅读 · 0 评论 -
Java题库11
1. (1) is any class which is a superclass of String (including String itself). (In this case, the only other suitable class is Object.)即包括String的父类和它本身的类。(2) (which in this specific ca原创 2016-08-08 20:54:32 · 413 阅读 · 0 评论