LOL 记录下我怎么学习《HeadFirst JAVA》的

来源:互联网 发布:软件项目服务方案 编辑:程序博客网 时间:2024/05/17 06:11

终于算是把JAVA这个坑入了,但下一步的发展想向着Unity。不知道什么时候会再用到java

开始学 数据结构与算法了,java语言描述的。 听说这个东西很有用,也挺深奥,学一遍可能不能明白吧。新年加油。

应该还会同时学 设计模式吧,学知识总是有用的。

新学知识的笔记再新开博文吧。

2016.1.4

一号学习最后两章,包 部署 发布 RMI,粗略的看过去了,也没记录什么。

今天把整本书结束,

P660 附录B

#10 位操作 >> 右移运算符 正负不变  >>> 无符号右移运算符

#9 不变性  String 如果已存在,引用以存在的对象 String Pool  不收垃圾回收器 管理

包装类不变性 包装类创建后 无法改变对象的值  (没有setter)

#8 断言  在认为一定是 true 的地方 加入assert 指令    assert(height > 0 ):"height  = " + height + "weight = " + weight;

千万别再assert中改变对象的状态!

#7 块区域  局部变量比实体变量更方便除错,扩展性更好。块变量更佳

#6 链接的调用 new Foo().go();

#5 Anonymous 和 Static  Nested Classes

静态嵌套类 不用外层实例化就可以使用,       匿名类,用于需要接口实现,却没有内部类的实例时

#4 存取权限和存取修饰符  

存取权限  public protected允许不用包的子类使用  default 同一包中可以存取  private 同一类中

存取符号  public 打算开发给其他程序的 类、常数、方法、构造函数  protected  private 实例变量、不想其他外部程序调用的方法。  
#3 String StringBuffer/ StringBuilder 的方法  JAVA5.0起 用Builder 取代 Buffer

#2 多维数组 数组的数组

#1 枚举 Enum  一组常量来代替可用值得集合,一种特殊的类  可以使用if switch 或 == .equals()来使用,不用担心变量的值

可以在enum 加入构造函数、方法、变量和特定常量


2016.1.1

2016年喽~有始有终,先把JAVA入门搞定

P560 集合与泛型

equals() 默认行为是 == 比较   heap上是否引用同一对象,   对象相等, hashCode相等,equals 覆盖  相等。

TreeSet 保持有序,防止重复

集合中的元素必须是 Comparable类型,或 使用重载、取用Comparator 参数的构造函数来创建TreeSet

Map  关键字(key)和值,  值可以重复 但关键字不行   列出时 用{ key=value }的形式

使用多态参数与泛型,如果把方法声明成取用ArrayList<Animal> 则只取用 ArrayList<Animal> ,其他多态不行。

数组的类型在运行期间检查,集合的类型检查在编译期间。

万用字符(wildcard),可以接受子类型参数的方法  带有<?> 的声明,编译器不允许向集合 中加入元素

声明类型参数  public <T extends Animal> void takeThing(ArrayList<T> list)   与 public boid TakeThing(ArrayList<? extends Animal> list) 相同 ,第一种减少重复

P581 第十七章 包、jar存档文件和部署

2015.12.29

总想着以后要做什么,才去学什么。是不是有点想多了。好好学我的JAVA吧

P529 第16章 集合与泛型

ArrayList     管理元素集合       Collection.sort(List) 可以实现按字母排序  但是List 元素是 String

TreeSet 以有序状态保持并可防止重复

HashMap 可用成对的name/value来保存与取出

LinkedList 针对经常插入或删除中间元素所设计的高效率集合

HashSet 防止重复的集合,快速寻找相符元素

LinkedHashMap 类似HashMap,但可以记住元素插入的顺序,也可以设定依照元素上次存取的先后来排序

泛型 generic  <>   更好的类型安全性            <E> 集合所要维护和返回的元素类型 element      与集合有关用E 其他用T 表示泛型

public <T extends Animal> void takeThing (ArrayList<T> list)

public  void takeThing (ArrayList<Animal> list)

泛型可以是继承或实现接口

集合有List Set Map

引用相等性   堆上同一对象的引用          

哈希码与JAVA内存位置 计算序列化有关,不会有相同的hashcode

== 用来比较变量上的字节组合,如果引用相同的对象 则字节组合也会一样

对象相等性  堆上的两个不同对象在意义上是相同的   hashCode()  equals()    覆盖哈希码,并且 equals()返回true

if(foo.equals(bar) && foo.hashCode() == bar.hashCode()) { 两个引用指向同一个对象 两个对象是相等的}

P263



2015.12.28

该思考应该往哪个方向深入发展了,安卓?游戏? 觉得VR以后会有很好的发展前景,只不过还没能流行起来,先学好扎实的技术,时刻关注 没准可以赶上第一波浪潮。

P470 第十五章 网络与线程

多线程  multithreaded

Socket 连接  需要IP地址 和 TCP端口号   0-65535   1024-65535 可用  0-1023保留给已知特定服务

绑定  BindException

Java.lang 默认import 包括 String System Thread

调度器 scheduler 调节调用线程    没有API可以调用调度器  调度无法确定  不同JAVA虚拟机上不同

可以用Runnable 和 Thread 子类 建立线程, Runnable接口唯一 run() 方法 表示线程的工作。 Thread子类与面向对象设计思想有关

run()方法一旦完成,线程不能再重新启动     对象可以还存在 但失去了执行性

程序员可以用sleep() 调节线程执行期  (译者说不要这么做 ,不刻意用sleep()(保证其他线程被执行)

并发性  concurrency     

 同步化 synchronized 关键词  来修饰方法, 使方法每次只能被单一线程存取。 锁住的是对象(一个对象一套锁和钥匙),所有存取数据的方法        

类也有一个锁 管理静态方法和静态变量

 竞争状态 race condition   丢失更新 lost update  死锁 deadlock

用setName() 帮线程命名, 通常用来除错

P524练习 附录A程序



2015.12.27

P429 第十四章 序列号 和文件的输入/输出

序列化(serialization)  .ser文件    如果只有自己写的JAVA程序会用到储存的数据   File和Object OutputStream

纯文本文件                     如果数据需要被其他程序引用

串流 stream   

当对象被序列化时,引用对象也会被序列化

Serializable接口,标记用接口  实现接口的类可以被序列化,子类也可序列化

序列化是全有或全无的。

如果某实例变量不能或不应被序列化,就把它 标记为 transient(瞬时)  以null 返回  或主数据类型默认值

相同的引用 只会被序列化 存储一次

解序列化 Deserialzation  还原对象   

读取 顺序与写入顺序相同    转换引用对象类型

 新对象配置在堆上,不执行构造函数。如果继承树上 有不可以序列化的 父类,则执行该父类和它之上 的 类的构造函数,全部重新初始状态。

静态变量static 不会被序列化(一个类一个,不是一个对象一个)还原时 静态变量维持类中原本的样子

transient变量  以null 返回  或主数据类型默认值       


字符串写入文本文件  FileWriter   记得要close         读文件 FileReader   用BufferedReader读取更有效率

java.io.File 

缓冲区 Buffer  更有效率,缓冲区满了 再写入磁盘    也可调用write.flush() 立即写入缓冲区内容

String的 split() 解析字串


Version ID  记录序列化的版本,还原时注意是否有违反安全性的修改   serialVersionUID  可以使用JDK里 serialver工具查询 被加入类中。


关于为什么博客,  这两天在论坛上看到,写博客 或者分享分析技术   只有当自己真正理解这个内容的时候,才能想法给别人讲明白。也是自己再一次整理学习的方式。现在还是在写读书笔记,入门阶段,等慢慢真正研究技术  或者学习新事物有心得的时候 要写出来和大家分享,自己也会有心得所得。

P470

2015.12.26

P399  第十三章 Swing

java.swing.JComponent

布局管理器 Layout Managers 控制所关联组件 所携带的其他组件

框架默认BorderLayout  面板默认 FlowLayout  BoxLayout

P429

2015.12.25

P353 第十二章 图形用户接口 GUI

JFrame  Widget Swing 组件

JFrame 不能直接添加组件, 需要用 它的content pane

Graphics g   由g所引用的对象 实际上是个 Graphics2D实例

P368 并没能太理解 结构 监听 事件 传递

程序一定要自己写一遍 才能有深入或者不一样的理解!! 如果之前不能理解,写一遍运行 也许就会理解!! 实践很重要!!

内部类 可以使用外部类的变量和方法  private 也可以

内部类的实例一定会绑在外部类的实例上*  只能存取一个实例的内容

内部类提供在一个类内 多次实现同一接口

P399


2012.12.24

P315 第十一章 异常处理  exception-handdling

Exception 类型
throws 抛出异常  public void takeRisk() throws BadException{...  throw new BadException();  ... }

调用该方法  try{ anObject.takeRisk(); } catch(BadException ex){ ex.printStackTrace(); } 如果无法从异常中恢复 至少使用printStackTrace() 来列出有用信息

try/catch 处理真正的异常,而不是程序的逻辑错误

不检查异常  不由编译器检查的RuntimeException的子类 

finally 块 存放不管有没有异常都得执行的程序,如果try catch  有return 指令, finally 还是会执行, 先执行finally 再return

如果有多个异常 方法的声明 必须含有全部可能的 检查异常, 异常有共同父类时,可以只声明父类        (异常是对象 父类继承,使用多态)  

public void takeRisk() throws BadException , AnotherException{...}

try{ anObject.takeRisk(); } catch(BadException ex){ ex.printStackTrace(); }  catch(AnotherException ex){...}

以处理方式是否相同决定是否使用多态。有多个catch块 要从小排到大   (最大是 Exception)  编译器无法通过 把大的放上面

duck掉不想处理的异常   把方法声明成跟有风险的调用一样会抛出相同的异常。

catch与 finally 不能没有try          try与catch之前不能有程序        try一定要有catch或finally         只带有finally的try 必须要声明异常   (duck) 

P353


2015.12.23

早起是个问题,需要解决。

P273 第十章 数字与静态

static 静态 标记出不需要类实例的方法

以类的名称调用静态的方法,以引用变量的名称调用非静态方法

静态的方法不能调用非静态的变量,和非静态的方法。

静态变量,被同类的所有实例共享的变量。  每个类一个静态变量   每个实例一个实例变量

静态 final变量 是常熟,不会再被改变     常熟变量的名称都是大写字母

final  变量 代表不能改变值    方法代表不能覆盖    类 代表不能被继承

final 的静态变量 必须在声明  或 静态初始化中 赋值   static{...}


primitive 主数据类型的包装,变为对象 Boolean  Character Integer Double 等 

JAVA5.0后 autoboxing 功能 自动将主数据类型转换成包装过的对象。

主数据类型会被初始化,但 主数据类型对象引用 初始化为null 没有值

+  是JAVA中 唯一有重载过的运算符


数字格式化 String.format()  

%[argument number] [flags] [width] [.precision] type    format("%,6.1f",42.000)

%d十进制 %f 浮点数 %c 字符 %x 十六进制

format 可变参数列表  varable argument list  简称 vararg

日期格式的类型 以t 开头的两个数字 %tc完整的日期与实践  %tr 只有时间     年,月,日 %tA %tB %td   <符号 用来告诉格式化程序 重复利用之前用过的参数

java.util.Calender    当前日期 java.util.Date

取得抽象类的实例 Calender cal = Calender.getInstance()

可以import 静态类,变量或enum

P315


2015.12.22

博客的阅读次数是不是都是审核的工作人员阅读的哈,每次我都发布一次。。。辛苦了,

看了下网易公开课,有好的资源  计算机科学及编程导论 , 算法导论。等入门完再进行学习。

今儿巴黎行好累,回来不能忘了学习。On y va!

P235 第九章 构造器与垃圾收集器

Garbage Collector 垃圾收集器   heap 堆  stack 栈  

对象在堆上预留 实例变量 主数据类型的大小 和 引用变量所用到的空间

创建对象和赋值的三个步骤,   声明引用变量   创建对象  赋值(连接对象和引用变量)

构造函数 不是方法    构造函数 不会被继承

新建对象时 存在构造函数链  (抽象类也有构造函数)

super.() 调用父类的构造函数,没有参数的那个。 如果没有 没有参数的构造函数呢?(报错?)

P273


2015.12.21 晚

今儿接着学下一章,假期还有两周,争取把 《head first JAVA》看完 入了门,话说写这个系列书的这帮人都有病~ LOL

P197 第八章 接口与抽象类

接口是多态和JAVA的重点

abstract  抽象  抽象类不能被初始化实例,但是可以作为引用。  抽象类只用来被继承 (有static成员除外)

抽象的方法 表示该方法一定要被覆盖。  public abstract void method(); 直接以分号结束

如果有抽象的方法 则类也必须是抽象的, (或是接口) 抽象方法没有内容。

继承树下第一个具体类必须实现所有抽象方法,也可以通过抽象 转给下层。 实现方法是覆盖

GUI 图形用户界面 Graphical User Interface


Object 是所有类的父类,  终极对象 Object 的方法  equals()  Class getClass()    int hashCode()   String toString()

P210 部分可以覆盖  强烈建议 覆盖掉 equals()     int hashCode()   String toString()

实例 Obetct 对象 会用在线程同步化上面(15章)

操作符 instanceof  检测类型

JAVA不允许多重继承


接口 interface 关键词

方法都是抽象的

public interface Pet{}

public class Dog extends Canine implements Pet{} 只有继承类可以实现接口。

类实现接口,必须覆盖实现出接口的方法。


super关键词 可以在子类中调用父类的方法

P230 没有做练习,感受了继承 多态 接口 抽象 Object 的概念之后 觉得到了入坑隧道的门口了,感觉到在学习很多新知识,但还有更多更多等待学习。

学习结束前要把重新掌握的问题标红。

2015.12.21

昨儿纠结了下要不要转专业到INFORMATIQUE,学技术真不在于 在哪里学,是不是科班。继续自己权衡吧,少扯没用的 学本事才是真的。

P165 第七章 继承与多态  extends

5个设计步骤 3个多态技巧 8种更具适应性方法 4项继承的建议

IS-A 检测是否需要继承    继承层次树

HAS-A 实例变量

可以用过 super 关键字 取用父类

父类可通过 存取权限 决定子类是否能够继承某些特定成员  access level

private  default  protected  public

public被继承 private 不被继承

继承的实例变量 不会被覆盖


当某各类比父类更具有特定意义的时候使用继承

在行为程序(实现程序代码)应该被多个相同基本类型类所共享时,应该考虑使用继承

《设计模式》需要学习!

若两者间的关系对于继承结构来说并不合理,则不要只是打算要重用其他类的程序代码而用继承

不能通过IS-A测试 不要用继承


当你定义出一组类的父类时,你可以用子型的任何类来填补任何需要或期待父型的位置。

多态 (polymorphism)   引用类型可以是实际类型的父类

多态数组  多态参数  多态返回类型

P189 如何防止作出继承子类

练习1 测试


2015.12.20

P125 第六章 认识JAVA的API  Application Programming Interface

ArrayList<String> API类,<>参数化类型   只能携带对象 而不是主类型,但编译器可以自动把主数据类型包装成对象以存放

|| && 短运算符   | &长运算符

java.lang 是个被预先引用的包 java.lang.String   java.lang.System是独一无二的

如何查询API 1.查阅参考书  2.查阅HTML API文档

还是没有理解为何要写伪码,如何写测试码。

P153 算法需要深入理解


2015.12.19

竟然还会有人看,我是记流水账的小菜鸟,大神们多指点。

P95 第五章 编写程序

伪码 测试码 真实码  (测试码  假设程序执行,模拟输入测试结果)  实现方法之前要编写测试码  用来检测类的方法

!!极限编程XP ExtremeProgramming (需要深入了解)

Integer JAVA内建类 可以进行类型转换   Integer.parseInt() 只在所给String  为数字时有作用

JDK 1.53 JAVA5.0(Tiger)对for语句进行了改进,为更好遍历数组,改进后的for语句格式如下:
   for(声明循环变量 : 数组名) { ...  }

   for(声明循环变量 : 数组名) { ...  } for each 或 for in 循环

Math.random() 产生0-1之间的随机数  Math.random() *5  0-4 之间的随机数

(int)强制转换

学习JAVA 语法基础是一方面,编程思想和习惯是另一方面。

P125

2015.12.18

。。。博客不是10年前流行的东西嘛,好吧 我算是入坑了。C'est parti !

P71第四章 方法操作实例变量

JAVA是通过值传递的  拷贝传递

如果参数是对象,传递的也是 引用 的拷贝

封装 Encapsultation

数据隐藏 private public

实例变量 永远有默认值 primitive(包括char) 0   浮点型 0.0  布尔 false  引用 null  (代表没有操作对象的远程控制,是引用 不是对象)

局部变量 没有默认值, 编译器报错 使用前必须初始化


论坛里好多专业术语都看不懂,功夫不够吧,从基础好好学吧。

2015.12.13

                   P27第二章 类与对象

         JAVA类内部变量 有实例变量 和类变量 static  类变量修改,所有对象改变。内部变量可以直接被修改。

         If函数内必须为TRUE OR FALSE 不能为数 INT  BOOLEAN值输出为 TRUE ORFALSE

         JAVA对象存放在堆中(HEAP),自动管理内存

                   P49第三章 primitive主数据类型和引用

         Primitive主数据类型 byteshort int 32 long(带正负号)    float 32 double   Boolean char16

         小数默认为 double  加 f 变为float  f=7.7f; 数字为int 型

         变量名称以 字母 _ $ 开头 不能用数字开头

         对象数组声明后 要创建对象 Dog[]myDog = new Dog[];   Dog[i]=new Dog();

类,数组对象,都是引用 reference , 放垃圾堆上了。

P71

2015.12.14

         思考为什么选择自学JAVA

         大学3年 留学3年 我的优势是什么?我想达到怎样的目标?

         和编程培训学校的差别

2015.12.18

         四天没有基础学习,浏览论坛,有一些帮助。

         编程学习入门门槛很低,但追求高水平的人并不多。知道自己为什么做,并带有热情去追求是优势所在。

         大学三年+留学 让我明白我真正想做 想追求的目标,并培养了很好的自学能力,都是为以后自学或深入学习编程做了良好的基础。

         目标很重要。已经有了目标,向目标前进,我需要更好的自制力。

         BTW 把游戏删了 ,学习也很快乐!


对了,还应该有个远大的目标!我要成为支柱!


0 0
原创粉丝点击