Java面向对象程序设计(进阶)
天外天工作室移动-Android 组新人培训 #4
-
static 关键字
static 关键字可用来修饰类的成员,包括成员方法和成员变量,static 成员也可以被称作静态成员或者类成员。可以通过像非静态成员一样通过对象访问,也可以直接通过类名访问。-
static 成员变量
在之前的例子中可以看到,每个对象各自占有一个非静态成员变量,与之相对应,静态成员变量为类、该类的所有对象所共享 ,且只在该类被初次加载时被初始化。
e.g. 我们在 Apartment 类中定义一个静态成员变量叫做 totalViewer,用于统计查询过用我们的类建造的房子人次,默认值为0。然后悄悄在 getSize() 方法中加入统计的逻辑,也就是让 totalViewer 加一。public class Apartment { private int size; public static int totalViewer = 0; public Apartment(int size) { this.size = size; } public int getSize() { ++totalViewer; return size; } }
然后在外部不管是 Apartment 类的哪个对象调用了 getSize() 方法,都会使同一个 totalViewer 变量自增。
Apartment a1 = new Apartment(200); a1.getSize(); a1.getSize(); System.out.println(a1.totalViewer); System.out.println(Apartment.totalViewer); Apartment a2 = new Apartment(300); a2.getSize(); a2.getSize(); System.out.println(a2.totalViewer); System.out.println(Apartment.totalViewer);
输出结果为2和4(通过对象或者类名都可以对静态成员变量进行访问)。
-
static 成员方法
像静态成员变量一样,静态成员方法也可以通过像非静态成员方法一样通过对象访问,或者直接通过类名访问。
因为在外部可以不创建对象、直接使用类名对静态成员方法进行访问,所以静态成员方法中不存在this指针。
静态成员方法中不能访问非静态成员,但是非静态成员方法中可以访问静态成员。
在 Android 开发中,很多工具类中的工具方法都是以静态方法的形式实现的。
-
-
内部类
嵌套在类中的类叫做内部类,当外部类中的某个属性过于复杂时可以使用内部类,内部类的对象可以使用 obj.new 字符进行实例化,内部类可能会破坏良好的代码结构,但是内部类的优势是可以访问外部类的成员。public class Apartment { private int size; public static int totalViewer = 0; public Apartment(int size) { this.size = size; } public int getSize() { ++totalViewer; return size; } public static int getTotalViewer() { return totalViewer; } class Location { City city; String street; int number; int floor; boolean faceEast; public Location(City city, String street, int number, int floor, boolean faceEast) { this.city = city; this.street = street; this.number = number; this.floor = floor; this.faceEast = faceEast; } public City getCity() { ++totalViewer; return city; } public String getStreet() { ++totalViewer; return street; } public int getNumber() { ++totalViewer; return number; } public int getFloor() { ++totalViewer; return floor; } public boolean isFaceEast() { ++totalViewer; return faceEast; } } }
调用:
Apartment apartment = new Apartment(300); Apartment.Location location = apartment.new Location(City.BEIJING,"Chang'An",305,3,true);
-
抽象类和抽象方法
抽象方法就是只有声明没有实现的方法,由继承抽象类的子类来实现具体的抽象方法,抽象方法用 abstract 关键字来修饰。
在面向对象程序设计的思想中,对象都是由类来实例化的,但是不是所有的类都可以用来实例化对象,如果一个类中的没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类,抽象类用 abstract 关键字来修饰,且抽象方法不能是 private 的。
包含抽象方法的类肯定是抽象类,但是抽象类中的方法不一定都是抽象方法。
代码来源
本文出现的代码是接着上篇文章的小 demo 写的
- staticeg 分支:静态成员的示例
- innerclass 分支:内部类示例
- abstract 分支:抽象类和抽象方法示例
GitHub 源码地址
作业
18191 移动 - Android 组第 4 次作业
请按时完成并上交。
再学好这些,你就掌握了入门 Android 开发的 Java 语言基础了!
- 接口
- 匿名内部类
- 异常处理
- 多线程
- lambda表达式*
- 反射机制*
- 注解机制*
* 较难,可以说是深入学习 Java 语言了
推荐 Java 学习网络资源或网站
大公司的 Java 编程规范
联系作者
Gmail: tianjin.whm@gmail.com
请斧正!