`
gtssgtss
  • 浏览: 16674 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论
文章列表
public getter不用锁 对单一对象,使用带锁独立副作用方法 对一组对象,使用一个在同一个包中的工具,依固定顺序加锁,相关的锁全部加完后,访问无锁的default final setter进行设值,锁与锁之间可以读取和计算,但不能进行设值

异常与函数

函数等于 一次性全局变量(参数,简写为a)+goto+一次性全局变量(返回值,非必须,简写为r)+goto 虚函数等于 switch(type)     a+goto+r+goto//首次goto可变 异常等于     a+goto switch(catch)     r+goto//2次goto可变 如果语言不能提供机制正常地实现异常的功能,那只好利用异常来做不属于他语义的事情了 第二:函数因为call和return共存,所以他其实不是一种忽略代码的机制,而常见的忽略代码的机制如if,都被限定在一个函数内,异常可以跨函数忽略代码

异常的语义

分析下程序里在哪些方面会出现非预期情况: 硬件、逻辑和预言。 预言是啥?好像没听过?其实它是常见的东西,如timeout,timeout就是一个预言,这段代码要在这段时间内完成。预言是最最根本的异常来源,所有其它异常都因他产生 硬件,如网络,这方面的非预期情况可以划给异常。为什么?因为有一个隐藏的预言,硬件正确。有可能用非预言定义硬件出错吗?不可能,因为硬件可能在任何时候出错。 逻辑,这个划给bug?其实这里是要细分的:客户端逻辑错误,本地逻辑错误,服务端逻辑错误 客户端逻辑错误,需要预言客户端正确吗?多数情况不是,因为可以通过检查进行分类,除非这个分类不可解(如停机问题)或不值得(考虑了性能) ...
public class Main { public static class A extends RuntimeException{} public static class B extends RuntimeException{} public static void throwRuntimeException(){ if(Math.random()>=Math.random()){ throw new A(); }else{ throw new B(); } } public static void use(A a){} ...
一,对象的传递 c++在传递对象的时候,很关注到底是对象(即复制对象),还是引用(即传原对象),以及是否const,除了效率之外,还牵涉到是否可修改,也就是语言的严谨性 但是到了java中,因为语言没有强制要求,很容易出现本该复制的对象,本体却到处乱传,特别是愚蠢的自动生成getter,setter,就是万恶之源, 二,封装 先上例子 public class A{ private int i = 0; public void a(){ i++; } public void b(){ i--; } public void c(){ ...
大家轻拍 发现少东西了,补上--
function Polygon(iSides) { this.sides = iSides; if(typeof Polygon._initialized == "undefined") { Polygon.prototype.getArea = function() { return 0; }; Polygon._initialized = true; } } function Triangle(iBase,iHeight) { Polygon.call(this,3); this.base = iBase; this.he ...
我鶸鰯才升到lv3 class MyClass { private final int base; private int current; public MyClass(int base,int current){ this.base = base < 0 ? 0 : base > 15 ? 15 : base; this.current = current < 0 ? 0 : current > 30 ? 30 : current; } public int getV ...
public interface SQLer<S,A,R> { void setSQL(S sql); void setArgs(A args); R getResult(); } public interface ArgsCreator<A> { A createArgs(); } 假设需要两个接口进行协作,但如果只这样定义,无法获得类型检查,因此,可以这样定义 public interface SQLer<S,A,R> { void setSQL(S sql); void s ...
接上回: :我们可以Extract Method(提炼函数)啊,只要把重复部分提炼出来就ok了. :别把问题想的太简单,你看这两个函数,主要是在返回的地方不同,没办法直接提炼,我们应该使用模板方法模式. :我们已经使用了模板方法模式了,现在要再次引入模板方法模式,不觉得太复杂了吗? :的确这样,看来我们给这个类赋予了过多职责. :嗯,我们把查询的功能分离出去吧,只剩下构造SQL的职责就没问题了 public abstract class SimplePagingQueryJdbcTemplate{ public static final Pattern fromPatter ...
public <T>List<T> query(SimpleQuery simpleQuery,Pager pager, RowMapper<T> rowMapper){ String querySQL = simpleQuery.getQuerySQL(); Object args = simpleQuery.getArgs(); long count = count(simpleQuery); pager.setTotalObjects(count); if(count<=pager.getFirstResult( ...
public abstract class SimplePagingQueryJdbcTemplate{ public static final Pattern fromPattern = Pattern.compile("from",Pattern.CASE_INSENSITIVE); public static final String countSQLHead = "select count(*) from "; public static final Pattern orderByPattern = Pattern ...
就不凑热闹了,只是抒发下自己的感情 毕业院校,某985; 大学生活,虚度光阴; 学业成绩,惨不忍睹; 人际关系,平均以下; 惟一欣慰,知足常乐。
public class Sword { private int power; }
固体神僧说,要有剑,于是有了剑 public class Sword {}
Global site tag (gtag.js) - Google Analytics