终于算是把JAVA这个坑入了,但下一步的发展想向着Unity。不知道什么时候会再用到java
开始学 数据结构与算法了,java语言描述的。 听说这个东西很有用,也挺深奥,学一遍可能不能明白吧。新年加油。
应该还会同时学 设计模式吧,学知识总是有用的。
新学知识的笔记再新开博文吧。
2016.1.4
一号学习最后两章,包 部署 发布 RMI,粗略的看过去了,也没记录什么。
今天把整本书结束,
#10 位操作 >> 右移运算符 正负不变 >>> 无符号右移运算符P660 附录B
#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入门搞定
equals() 默认行为是 == 比较 heap上是否引用同一对象, 对象相等, hashCode相等,equals 覆盖 相等。P560 集合与泛型
TreeSet 保持有序,防止重复
集合中的元素必须是 Comparable类型,或 使用重载、取用Comparator 参数的构造函数来创建TreeSet
Map 关键字(key)和值, 值可以重复 但关键字不行 列出时 用{ key=value }的形式
使用多态参数与泛型,如果把方法声明成取用ArrayList
则只取用 ArrayList ,其他多态不行。 数组的类型在运行期间检查,集合的类型检查在编译期间。
万用字符(wildcard),可以接受子类型参数的方法 带有> 的声明,编译器不允许向集合 中加入元素
声明类型参数 public
void takeThing(ArrayList list) 与 public boid TakeThing(ArrayList extends Animal> list) 相同 ,第一种减少重复
P581 第十七章 包、jar存档文件和部署
2015.12.29
总想着以后要做什么,才去学什么。是不是有点想多了。好好学我的JAVA吧
P263ArrayList 管理元素集合 Collection.sort(List) 可以实现按字母排序 但是List 元素是 StringP529 第16章 集合与泛型
TreeSet 以有序状态保持并可防止重复
HashMap 可用成对的name/value来保存与取出
LinkedList 针对经常插入或删除中间元素所设计的高效率集合
HashSet 防止重复的集合,快速寻找相符元素
LinkedHashMap 类似HashMap,但可以记住元素插入的顺序,也可以设定依照元素上次存取的先后来排序
泛型 generic <> 更好的类型安全性
集合所要维护和返回的元素类型 element 与集合有关用E 其他用T 表示泛型 public
void takeThing (ArrayList list) public void takeThing (ArrayList
list) 泛型可以是继承或实现接口
集合有List Set Map
引用相等性 堆上同一对象的引用
哈希码与JAVA内存位置 计算序列化有关,不会有相同的hashcode
== 用来比较变量上的字节组合,如果引用相同的对象 则字节组合也会一样
对象相等性 堆上的两个不同对象在意义上是相同的 hashCode() equals() 覆盖哈希码,并且 equals()返回true
if(foo.equals(bar) && foo.hashCode() == bar.hashCode()) { 两个引用指向同一个对象 两个对象是相等的}
2015.12.28
该思考应该往哪个方向深入发展了,安卓?游戏? 觉得VR以后会有很好的发展前景,只不过还没能流行起来,先学好扎实的技术,时刻关注 没准可以赶上第一波浪潮。
P524练习 附录A程序多线程 multithreadedP470 第十五章 网络与线程
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() 帮线程命名, 通常用来除错
2015.12.27
序列化(serialization) .ser文件 如果只有自己写的JAVA程序会用到储存的数据 File和Object OutputStreamP429 第十四章 序列号 和文件的输入/输出
纯文本文件 如果数据需要被其他程序引用
串流 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
P429java.swing.JComponentP399 第十三章 Swing
布局管理器 Layout Managers 控制所关联组件 所携带的其他组件
框架默认BorderLayout 面板默认 FlowLayout BoxLayout
2015.12.25
P353 第十二章 图形用户接口 GUI
JFrame Widget Swing 组件
JFrame 不能直接添加组件, 需要用 它的content pane
Graphics g 由g所引用的对象 实际上是个 Graphics2D实例
P368 并没能太理解 结构 监听 事件 传递
程序一定要自己写一遍 才能有深入或者不一样的理解!! 如果之前不能理解,写一遍运行 也许就会理解!! 实践很重要!!
内部类 可以使用外部类的变量和方法 private 也可以
内部类的实例一定会绑在外部类的实例上* 只能存取一个实例的内容
内部类提供在一个类内 多次实现同一接口
P399
2012.12.24
P353Exception 类型P315 第十一章 异常处理 exception-handdling
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)
2015.12.23
早起是个问题,需要解决。
P315P273 第十章 数字与静态
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
2015.12.22
博客的阅读次数是不是都是审核的工作人员阅读的哈,每次我都发布一次。。。辛苦了,
看了下网易公开课,有好的资源 计算机科学及编程导论 , 算法导论。等入门完再进行学习。
今儿巴黎行好累,回来不能忘了学习。On y va!
P273Garbage Collector 垃圾收集器 heap 堆 stack 栈P235 第九章 构造器与垃圾收集器
对象在堆上预留 实例变量 主数据类型的大小 和 引用变量所用到的空间
创建对象和赋值的三个步骤, 声明引用变量 创建对象 赋值(连接对象和引用变量)
构造函数 不是方法 构造函数 不会被继承
新建对象时 存在构造函数链 (抽象类也有构造函数)
super.() 调用父类的构造函数,没有参数的那个。 如果没有 没有参数的构造函数呢?(报错?)
2015.12.21 晚
今儿接着学下一章,假期还有两周,争取把 《head first JAVA》看完 入了门,话说写这个系列书的这帮人都有病~ LOL
接口是多态和JAVA的重点P197 第八章 接口与抽象类
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,学技术真不在于 在哪里学,是不是科班。继续自己权衡吧,少扯没用的 学本事才是真的。
《设计模式》需要学习!5个设计步骤 3个多态技巧 8种更具适应性方法 4项继承的建议P165 第七章 继承与多态 extends
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
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 把游戏删了 ,学习也很快乐!
对了,还应该有个远大的目标!我要成为支柱!