笔记整理

1, Stack, heap, contructor

Stack: method invocations, local variables

所以在eclipse里查看stack trace,最上面的是当前调用的方法,当结束当前方法,其就会被移出stack.

variable: primitive, or non-primitive:Object

注意local variable如果是reference to object, stack只会存放reference,真正的object还是会在heap里面。

Heap: ALL objects[including instance variable]

instance variable不同于local var, 它是定义在class里,method外的变量。Default value of instance var: primitive 0/0.0/false, Reference null.

例如:在cellphone class里定义有instance variable Ant, 在cellphone object自己所占的堆空间中并不会存有Antenna object的,只会寸它的ref ant.

class Cellphone{ private Antenna ant = new Antenna(); //将object同ref连接起来

Constructor:

当自己不定义任何constructor时,compiler才会帮忙提供一个无参数的constructor。自己可以定义多个,有参+无参,overloaded constructor之间可用this(...)调用。

constructor和method的区别是没有return type. constructor不可以继承,一定要明确调用父类的constructor。

constructor chaining: 子类在实例化的时候一定要一层层往上调用父类的constructor. 例如stack最上面是Object(), Animal(), 最下面是Hippo()。

在一个constructor里面不可以同时call super()和this(...).

Variable life:

instance variable:跟object一样长。

local variable: 跟其所在的method在stack中待的时间一样长。

Reference var的life是只要Ref alive, object就alive in heap. Otherwise, abandoned by heap, reachable by GC.

Life z = new Life();  //这个z引用被赋予新值,或是被设为null,那原本的object就可以被GC了。

2, Java webservice:

实现方法JAX-WS

Webservice处理数据的方式是用Schema将XML定义成标准(即wsdl), WSDL(web service discription language)规范是一个描述接口,语义及web服务为了响应请求需要经常处理的工作的文档。

UUDI利用soap消息机制(XML/HTTP):用XML格式来封装各种数据,发送到注册中心,或由注册中心返回数据。

Steps: Request XML(SOAP) -> JAXB -> JAVA object -> JAXB ->Response XML(SOAP)

JDK中的wsimport是个工具,用来根据wsdl生成客户端代码。

小结:用java写好webservice以后,EndPoint.publish()可以将自己的webservice发布。在客户端,用wsimport生成webservice的客户端代码(生成的启动需要指明webservice的URL),然后就可以调用了。

JAXB: Java architecture for XML binding.

JAXB包括"xjc"工具:XML->JAVA, "schemagen"工具: JAVA->XML[JAXBContent:Marshaller].

3, Java advantage

Java的优点: friendly syntax, object-oriented features, memory management, portability.

Portability是指:Javac compile过的byte code是platform-independent的,只要平台上有VM就可以读取bytecode运行。

Java的起点:public static void main(String[] args)

4, Serialization

序列化可以将object保存起来,之后可以被java program读取。

Object ---> OjbectOutputStream(Chain stream) ---is chained to---> 0110001010(FileOutputStream, ConnectionStream) ---> file

FileOutputStream fileStream = new FileOutputStream("M.ser");

ObjectOutputStream os = new ObjectOutputStream(fielStream);

os.writeObject(01);

os.close();

保存object的意思是:保存了所有member的value, 如果instance variable指向其它object,它们也会被序列化。保存object的前提是这个object要implement Serializable Interface。保存object的时候可以选择只保存一部分变量: 用transient keyword,可令变量被skip。

Deserialization process: File->FileInputStream->ObjectInputStream->Object.

对于读写text file,可用FileWriter:

FileWriter writer = new FileWriter("Foo.txt"); writer.write("hello!");  writer.close();

要提高efficiency,可用BufferWriter,因为FileWriter每次写个String都会放到Disk的File里。用BufferedWriter,可以将String放入Buffer,Buffer满了再入File.

Object的class implements Serializable,有用到SerialVersionUID,这个UID是根据当前class算出来的,当Object被Desirialized时,这个ID会与JVM用的class的ID比较,相等才可以。

5,Java Numbers & Statics

Math.round()这些Math的methods都是static方法,所以不用Math类的Object即可使用。

使类不能实例化: Abstract class/private constructor.

final的作用:variable不能改值,method不能被override,class不能被继承。

primitive type:例如int, double,不是Object, 当需要Object时,可以将其wrap为Integer, Double, Character...这样就可以有null value,或作为Generic type。

两者可以自动转换,这些Integer/Double class的好处是提供了String和int, double...之间的转换方式:

int x = Integer.parseInt("2"); //Can throw NumberFormatException, runtime的

String y = Integer.toString(x);

6, Generic method:

public class ArrayList<E> extends AbstractList<E> ...{

  public boolean add(E o);

public <T extends Animal> boolean add(ArrayList<T> list)

7, Same object

得是.hashcode()相同,或是.equals()成立。

HashCode是Java给Object基于Object‘s memory address on the heap. 所以没有两个object是相同的hashcode,但你可以override它。最好是当你的class是value object的时候,(即值相等,物体即可相等),才有需要override .equals()方法。

I1: Static factory methods:

除了用constructor构建object外,就是用static factory method了。优点:method name可以设计的更易懂, 不必每次call都生成新的object,Return type可以不必是当前class本身而是其subclass(例如Collections全都是static methods返回其它Collection class).

a, valueOf(param) 返回与param相同值的class instance.

b, getInstance 包括Singleton

c, newInstance 保证返回的instance与其它的都不同

I2: 针对太多constructor params的Builder方法

当一个class有太多params给constructor/static factory的时候,选择Builder pattern是好的。

public class A{

  private final int a1, a2...

  public static class Builder{

    private final int a1, a2...

    public Builder(int a1, int a2) {this.a1 = a1; this.a2= a2;}

可选的   public Builder a3(int a3)       {this.a3=a3;return this;}

    ...

  }

  private A(Builder builder)     {a1 = Builder.a1; a2 = Builder.a2;...}

}

I3: Singletong:

1, public class A{

  public static final A INSTANCE = new A();

  private A() {...}

}

用public static final field A.INSTANCE.

2,用static factory method.

public class A{

  private static final A INSTANCE = new A();

  private A() {...}

  public static A getInstance() { return INSTANCE;}

}

I4:有时你会需要设计class只包含一堆static methods, static fields, 这种class不是被instantiated的,有instance不合理,所以可以用private constructor.

I5:

An Object can always be reused if it is immutable. 例如String s = "stringette";每次执行时,不会重新建立新的,但是String s = new String("stringette");会建立新的

By using factory methods on immutable classes: 例如Boolean.valueOf(String)就不会建新的,而Boolean(String) constructor会建立新的。

Reuse mutable objects if you know they won‘t be modified.例如一个class A里的isBabyBoomer()方法里有建立新的Calendar Date objects, 它们也不会被改变,每次call时都一样,就可以把它们拿出来放在class A里Static{   }里面。

Prefer primitives to boxed primitives, and watch out for un-intentional autoboxing.

时间: 2024-12-09 09:14:18

笔记整理的相关文章

《iOS应用架构谈 view层的组织和调用方案》笔记整理

结束前段时间的忙碌,近来工作没什么任务.就趁上班时间学习一点东西. 读完了Casa Taloyum的<iOS应用架构谈 view层的组织和调用方案>,写的很认真,很详尽,收获颇丰.着手整理下目前自己能领悟到的一些知识. 先分享下:http://casatwy.com/iosying-yong-jia-gou-tan-viewceng-de-zu-zhi-he-diao-yong-fang-an.html 代码结构 先声明一点,我们之所以注重代码结构和格式,是为了代码的可读性和后期的可维护性,当

iOS应用架构谈 view层的组织和调用方案(转~地址)

来自:iOS应用架构谈 view层的组织和调用方案 http://www.devzhou.com/2017/07/19/casa-ios-architecture-view/

iOS应用架构谈 view层的组织和调用方案

前言 <iOS应用架构谈 开篇>出来之后,很多人来催我赶紧出第二篇.这一篇文章出得相当艰难,因为公司里的破事儿特别多,我自己又有点私事儿,以至于能用来写博客的时间不够充分. 现在好啦,第二篇出来了. 当我们开始设计View层的架构时,往往是这个App还没有开始开发,或者这个App已经发过几个版本了,然后此时需要做非常彻底的重构. 一般也就是这两种时机会去做View层架构,基于这个时机的特殊性,我们在这时候必须清楚认识到:View层的架构一旦实现或定型,在App发版后可修改的余地就已经非常之小了

iOS应用架构谈 view层的组织和调用方案(转)

前言 <iOS应用架构谈 开篇>出来之后,很多人来催我赶紧出第二篇.这一篇文章出得相当艰难,因为公司里的破事儿特别多,我自己又有点私事儿,以至于能用来写博客的时间不够充分. 现在好啦,第二篇出来了. 当我们开始设计View层的架构时,往往是这个App还没有开始开发,或者这个App已经发过几个版本了,然后此时需要做非常彻底的重构. 一般也就是这两种时机会去做View层架构,基于这个时机的特殊性,我们在这时候必须清楚认识到:View层的架构一旦实现或定型,在App发版后可修改的余地就已经非常之小了

iOS应用架构谈(二):View层的组织和调用方案(上) 作者 田伟宇 发布于 2015年5月25日

iOS客户端应用架构看似简单,但实际上要考虑的事情不少.本文作者将以系列文章的形式来回答iOS应用架构中的种种问题,本文是其中的第二篇,主要讲View层的组织和调用方案.上篇主要讲View层的代码结构.布局,以及一些最佳实践的讨论. 当我们开始设计View层的架构时,往往是这个App还没有开始开发,或者这个App已经发过几个版本了,然后此时需要做非常彻底的重构. 一般也就是这两种时机会去做View层架构,基于这个时机的特殊性,我们在必须清楚认识到:View层的架构一旦实现或定型,在App发版后可

iOS应用架构谈(二):View层的组织和调用方案(中)

iOS客户端应用架构看似简单,但实际上要考虑的事情不少.本文作者将以系列文章的形式来回答iOS应用架构中的种种问题,本文是其中的第二篇,主要讲View层的组织和调用方案.中篇主要讨论MVC.MVCS.MVVM.VIPER等架构在iOS开发中的应用. 关于MVC.MVVM等一大堆思想 其实这些都是相对通用的思想,万变不离其宗的还是在开篇里面我提到的那三个角色:数据管理者,数据加工者,数据展示者.这些五花八门的思想,不外乎就是制订了一个规范,规定了这三个角色应当如何进行数据交换.但同时这些也是争议最

iOS应用架构谈(三):View层的组织和调用方案(下)

iOS客户端应用架构看似简单,但实际上要考虑的事情不少.本文作者将以系列文章的形式来回答iOS应用架构中的种种问题,本文是其中的第二篇,主要讲View层的组织和调用方案.下篇主要讨论做View层架构的设计的一些心法. 本门心法 重剑无锋,大巧不工. ---- <神雕侠侣> 这是杨过在挑剑时,玄铁重剑旁边写的一段话.对此我深表认同.提到这段话的目的是想告诉大家,在具体做View层架构的设计时,不需要拘泥于MVC.MVVM.VIPER等规矩.这些都是招式,告诉你你就知道了,然后怎么玩都可以.但是心

OS应用架构谈(二):View层的组织和调用方案(中)

OS应用架构谈(二):View层的组织和调用方案(中) 作者 田伟宇 发布于 2015年5月28日 | 注意: ArchSummit全球架构师峰会(北京)2015年12月18-19日,了解更多详情!讨论 分享到:微博微信FacebookTwitter有道云笔记邮件分享 稍后阅读 我的阅读清单 iOS客户端应用架构看似简单,但实际上要考虑的事情不少.本文作者将以系列文章的形式来回答iOS应用架构中的种种问题,本文是其中的第二篇,主要讲View层的组织和调用方案.中篇主要讨论MVC.MVCS.MVV

iOS应用架构谈-part2 view层的组织和调用方案

前言 <iOS应用架构谈 开篇>出来之后,很多人来催我赶紧出第二篇.这一篇文章出得相当艰难,因为公司里的破事儿特别多,我自己又有点私事儿,以至于能用来写博客的时间不够充分. 现在好啦,第二篇出来了. 当我们开始设计View层的架构时,往往是这个App还没有开始开发,或者这个App已经发过几个版本了,然后此时需要做非常彻底的重构. 一般也就是这两种时机会去做View层架构,基于这个时机的特殊性,我们在这时候必须清楚认识到:View层的架构一旦实现或定型,在App发版后可修改的余地就已经非常之小了

[转] iOS应用架构谈 网络层设计方案

原文地址:http://casatwy.com/iosying-yong-jia-gou-tan-wang-luo-ceng-she-ji-fang-an.html iOS应用架构谈 开篇 iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方案 iOS应用架构谈 动态部署方案 iOS应用架构谈 本地持久化方案 前言 网络层在一个App中也是一个不可缺少的部分,工程师们在网络层能够发挥的空间也比较大.另外,苹果对网络请求部分已经做了很好的封装,业界的AFNetworking