Learn Java for Android Development Second Edition 笔记(三)
来源:互联网 发布:js onclick 编辑:程序博客网 时间:2024/04/24 05:27
Collecting Garbage
Java提供一个后台程序GC来负责回收未被引用的对象,一般不需要用户自己手动设置对象为null,除非像一些collection里的对象要注意。
对象数组
Image[] imArray = new Image[3];for (int i = 0; i < imArray.length; i++)imArray[i] = new Image("image" + i + ".png"); // image0.png, image1.png, and so on注意以上第一句话里实际上只是创建了三个空引用,并未实际创建对象,所以在接下来的行真正去new对象。
Inheritance
Java支持单一继承对象,但是可以实现多重interface。class Vehicle{// member declarations}class Car extends Vehicle{// member declarations}不能够extend声明为final的class。
super()函数是用来调用父类的构造函数,super只能出现在构造函数中,并且必须是第一行(因为这就符合下面的原则:子类的构造函数会先调用父类的构造函数)。如果没调用super,且父类没有无参构造函数,编译器会报错,因为子类构造函数会在没有super()情况下调用父类的无参构造函数。换句话说,子类的构造函数需要要么手动通过super函数调用父类相应同参数的构造函数,要么就是默认的调用父类的无参构造函数。子类没有但是父类有的构造函数,子类是不能直接调用的。
一个类的对象不能被改变时,这种类称为immutable class。
Override方法
- 子类的方法替换父类同名,同参数,同返回值的方法。
- 子类override父类的方法里,可以通过super.method来再次调用父类的方法。
- 对于声明为final和private的方法,不能被override。
- 如果想使用Override方法,则建议在子类的该方法前加上@Override,这样编译器就可以帮你检查出来你是否真正的override了父类的同名方法,而不是overload。override需要函数同名,同参数,同返回值。
父类的class initializers总是在子类的class initializer之前执行。
子类的构造函数总是会调用父类的构造函数来初始化一个对象的父类层,然后再初始化子类层。A subclass’s constructor always calls the superclass constructor to initialize an object’s superclass layer and then initializes the subclass layer.
Java只支持单一继承。
终极祖类Object
clone()方法
该方法用于创建一个新的对象而不需要调用一个构造器。它将原子类型数据或引用的数据拷贝到新对象里。
实现该方法的类必须加上implements Cloneable
Shallow clone:浅拷贝,就是指不明显地实现clone()方法,而是利用Object类自身的clone方法。[这是书上所说,但是实际在ADT环境测试下来,必须显示地声明实现clone方法(否则会报出clone方法不可见错误),然后在clone方法里调用父类的clone方法,如下示例:]
class Employee implements Cloneable{String name;int age;Employee(String name, int age){this.name = name;this.age = age;}@Override public Object clone() {//shallow copytry{return super.clone();} catch (CloneNotSupportedException e) {return null;} }}String方法就没有实现clone接口。
将一个对象clone到新对象后,新对象和老对象的引用值是不一样的,所以如果用==来比较两个对象,结果是false。
shallow clone也有需要注意的地方,对于原子类型的成员数据,值是拷贝的,对于对象类型成员数据,新老对象是引用同一个数据。所以只要有任何一个对象改变了它的对象成员数据,另一方也会跟着被改变。对于成员数据是String类型,由于它是不可改变的,所以倒是不需要注意这个副作用。
如果想要避免以上shallow clone的副作用,那么可以在类的clone方法里,除了调用父类的shallow clone外,在手动地把对象类型的成员变量new出一个新的来。如以下例子:
@Overrideprotected Object clone() throws CloneNotSupportedException{Employee emp = (Employee) super.clone();if (hireDate != null) // no point cloning a null object (one that doesn't exist)emp.hireDate = new Date(hireDate.year, hireDate.month, hireDate.day);return emp;}
Equality
Object的==和!=操作符,对于原子类型的数据,比较的是值是否相等,对于对象类型数据,比较的是两个引用是否指向同一个数据。不能用==来判断两个对象是否逻辑上相等(逻辑上相等指它们所有成员变量的值一致,即使引用不一样)。String类型因为比较常用,它的==实现有比较特殊 的地方
System.out.println("abc" == "abc"); // Output: true
System.out.println("abc" == "a" + "bc"); // Output: true
System.out.println("abc" == "Abc"); // Output: false
System.out.println("abc" != "def"); // Output: true
System.out.println("abc" == new String("abc")); // Output: false
System.out.println("abc" == "a" + "bc"); // Output: true
System.out.println("abc" == "Abc"); // Output: false
System.out.println("abc" != "def"); // Output: true
System.out.println("abc" == new String("abc")); // Output: false
Object对象提供了equals()方法来比较两个对象是否逻辑上相等,该方法确实是比较两个引用是否指向同一个值,如果要比较对象的内容,必须override实现equals方法。
必须考虑是否一定要实现equals方法,StringBuffer就没有override该方法。
实现equals方法需要满足以下原则:
0 0
- Learn Java for Android Development Second Edition 笔记(三)
- Learn Java for Android Development Second Edition 笔记(一)
- Learn Java for Android Development Second Edition 笔记(二)
- Learn Java for Android Development Second Edition 笔记(四)
- Learn Java for Android Development Second Edition 笔记(五)
- Learn Java for Android Development Second Edition 笔记(七)
- Learn Java for Android Development Second Edition 笔记(六)- Interface
- JAVA线程——选自《Learn Java for Android Development》
- Learn Java for Android Development (第三版)---封面
- Learn Java for Android Development (第三版)---简介
- Pro Drupal Development, Second Edition
- Linux kernel Development second Edition
- 《Effective Java》Second Edition中文版笔记(完整)
- Learning ROS for Robotics Programming Second Edition学习笔记(三) indigo rplidar rviz slam
- Learning ROS for Robotics Programming Second Edition学习笔记(三) 补充 hector_slam
- 3D Math Primer for Graphics and Game Development Second Edition
- Pro Java Programming, Second Edition
- Java Swing, Second Edition [ILLUSTRATED]
- 取括号中的内容
- utf-8占几个字节
- 一些JAVA面试的题目吧一些记住的题目
- 灯塔aoi--地图视野处理
- Java中的四舍五入
- Learn Java for Android Development Second Edition 笔记(三)
- linux系统目录
- Codeforces Round #216 (Div. 2) A. Valera and Plates
- hdf5
- android 获取http网络图片保存png
- 【LabVIEW小技巧】LabVIEW将普通字符串转为十六进制(Hex)显示
- 如何在自定义控件中获得width和height?
- SPOJ 11. Factorial 阶乘尾零求解
- 怎样对付公司里的混蛋
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
启明星辰utm
启明星辰4a
中庭望启明
启明星辰杯
张启明
陈启明孙玉梅
霍启明免费阅读目录
启明星辰股票
男主叫霍启明女主叫叶锦书
启明星辰股吧
叶锦书一霍启明
相爱十年陈启明结局
霍启明莫夕作品
002232启明信息
启明星歌曲乔可星
启明信息股吧
丁雨秋霍启明
李启明个人资料
启明信息002232
启明信息股票
启明幼儿园怎么样
启明星辰怎么样
启明星辰代理商
启明星辰信息技术有限公司
启明星辰网闸
启明小动物保护中心
华中科大启明学院
启明星辰明天走势分析
002439启明星辰股吧
启明星辰走势分析
股票启明星辰
启明星辰股票吧
启明gps监控系统
启明星辰400电话
启明英语听说考试系统
启明星辰培训
启明星辰售后
新启明幼儿园
启明星辰电话
启明星辰走势图
启明星辰待遇怎么样