• java 编程思想——基础篇


    == 与!=比较的是对象的引用,object reference;内容的比较用equals();

    boolean不能使用not运算符

    >>>:无正负号的右移运算符,采用所谓的零扩展,不论原值是正或负,一律在较高位补0

    String +运算中,如果某个表达式以String为首,那么持续的所有的操作数也都必须是Strings。

    1.39e-47f:表示的是1.39×10^(-47)

    char, byte,short上进行的任何数学运算或位运算,运算之前其值都会被晋升为int

    boolean不支持在上面的任何运算

    java 中不允许用数字作为boolean

    从float或double转变为整数值,总是完全舍弃小数,(而非四舍五入)

    Math.random()的输出包括0.0,输出范围也就是[0,1)

    对于static,没有this的概念。

    垃圾回收器只知道释放由new分配的来的内存。

    finalize()函数用来释放非new产生的,特殊的内存。它让你得以在垃圾回收时刻执行某些重要的清理动作。

    垃圾回收不等于析构(destruction),你的对象可能不会被回收

    垃圾回收动作只回收内存

    通过java的非正常管道分配,打算做些类似C的事情,才是使用finalize的最好时机,例如通过native method调用C的free函数

    装载某个class时(通常是在你为它产生第一个对象时),编译器首先会找到其.class文件,然后将class byte codes装载到内存。

    java保证,变量绝对会在他们被使用之前被适当的初始化,当变量被定义与函数之内,java会用编译期错误消息来贯彻他的保证

    class中初始化的顺序取决于变量在class中定义的顺序,所有变量会在任何一个函数被调用之前完成初始化。

    对象生成过程:1、当某个型别的对象首次被产生出来时,或是当类的static函数,或者static数据成员首次被访问,java直译器(inter preter)必须查找环境变量classpath所制定的位置,找到Dog.class。2、一旦class文件被装载(这样就产生了一个Class对象),它的所有的static初始动作会被执行起来,因此static初始化动作仅会发生一次,就是在Class对象首次被装载时。3、当new一个对象时,建构过程会先为对象在heap分配足够的存储空间。4、这块存储空间会先被清零,并自动将基本数据类型初始为缺省值,并将reference设为null。5、执行所有出现于数据定义处的初始化动作 6、执行构造函数。

    Integer[] a = new Integer[4];这还是个reference array,还需要生成新的Integer对象来初始化

     

    第五章:

    将变得的事物与不变的事物彼此隔离,是面向对象设计的首要考虑

    java的可执行程序是一组.class文件,java的jar压缩工具能将众多的.class文件结合起来并予以压缩,java的直译器负责这些文件的查找,装载,解释

    如果基类的构造函数有参数,则在子类中应该在一开始用super初始化

    第9章:持有你的对象

    无论你所使用的Array的型别为何,array本身实际上是个reference,指向heap之内的某个实际对象,这个对象持有“指向其他对象”的一些reference。

    array的length函数可以得到数组的长度,但是不能得到实际存在的元素。array含有引用,跟引用指向一个实际的值是不一样的。

    java中可以直接返回一个array,虽然实际返回是一个指向array的引用,但此刻你不需要负起照料array的责任

    Arrays 类有一组static函数,能够执行许多array共用函数,有四个基本函数equals,fill,sort,binarySearch

    fill函数将同一个数值填充到数组中

    System.arraycopy()可以拷贝privitives array和object array,不过复制objects array时仅有reference会被复制,元素对象本身并不会被复制,此所谓浅层拷贝。

    Arrays提供了重载版的equals(),来比较两个array是否相等。

    ArrayList其实就是会自动扩容的Array,用法非常简单用add增加元素,用get配合索引将他们取出,优点在于可随机访问其中元素

    容器分类中,abstract类只是提供一些简单的工具,只需要关心interface和concreteClass即可。

    Collection中并不包含get函数,因为colleciton涵盖了set,而set会维护它自己的内部排列(这就使得随机访问不具有意义),因此如果你想查看collection内的所有元素,得使用迭代器才行。

    Vector,Stack,Hashtable都是老旧的版本,最好不好使用。

    List中最重要的特征是次序(Order),它保证以某种特定的次序来维护元素。

    HashSet和TreeSet中的数据都是有序存放的。

    HashSet:把查找时间看的很重要,所有元素都必须定义hashCode()

    TreeSet:底层结构为tree的一种有序Set,这样便可以从set中提取一个有序的序列。

    使用Hashset,treeset都得定义equals()函数,但只有使用HashSet时才一定得定义hashCode,

    HashSet往往是选择Set实现对象的第一选择。

    ArrayList是数字与对象的关联,而Map是对象与对象的关联。

    HashMap:基于hash table的一个实现品,可在常量时间内安插元素,或找出一组key-value pair,通过构造函数还可以调整效能表现。

    treeMap:基于红黑树的一个实现,当检视其中的key或key-value时,会以排序的形式出现,特色是让你得以排序的形式得到结果。

    因为HashMap使用hash table来实现,如果使用自己定义的class来作为key,则需要这个类要重写hashCode和equals函数;

    设计hashCode时最重要的因素就是:无论hashcode()何时被调用,针对同一个对象,每次被调用都应该产生相同的值,

    通过Collections类中的synchronize方法来得到同步版本。

  • 相关阅读:
    【原创】R61509/SPFD5420A驱动调试总结
    [轉貼]程序员需要具备的基本技能
    Entity SQL 说说IN关键字
    细说可空类型 nullable
    C#值类型与引用类型之我见
    解密区域集成服务器
    序列化对象,使用的三种方式:Xml,Binary,Soap
    有时间就买点书
    hdu2680 Choose the best route
    SQLServer 函数类型简要说明
  • 原文地址:https://www.cnblogs.com/daichangya/p/12960034.html
Copyright © 2020-2023  润新知