这些天我翻看以前的项目,打算把java温习一遍。学习材料为Oracle的The Java™ Tutorials。
面向对象
Java是一门面向对象的语言。我几乎忘了其实python也是面向对象语言,因为用python都是在写处理数据的脚本而不太能称之为程序,像一个操作数据的流水线工人;而用java的时候我常常体会到这一点,因为都是在编写一个个类。类(class)和物(object)是面向对象的重要概念。日常生活中有很多物体,他们都可以看作是一个类的实例(instance),比如本山的自行车就是自行车类的实例。当设计一个类的时候,我们从两方面对它进行设计,属性(field)和方法(method)。属性即生产一辆自行车时给它定义的参数,装上几个轮,贴上什么牌,等等;自行车造出来了,它需要和外界的其他物体进行交互,因此我们给它定义方法,加速,刹车等。
对本山的自行车进一步抽象,它就是一辆车,车称为自行车的父类(superclass),相应的自行车就是车的子类(subclass),在自行车类的声明中用extends关键字表明它继承自车类。子类继承了父类所有的属性和方法和嵌套类,提升代码的复用性和维护性。例如,声明每一种车的时候,我们不用重复声明它们有*数这一属性,只需在父类中声明一遍就行了。每个类只能有一个直接父类(单继承),Object
类是最顶层的类。
变量
注意区分一些概念。
Fields指写在类里的变量,包含static fields(又称class variables)和non-static fields(又称instance variables)两种。Class variables使用static关键字进行声明,在内存中只存在一个副本;它的一个作用是作为该类的各种实例共享的属性,例如不论是本山的自行车还是本水的自行车,都有两个轮,写static int numGears = 2
一方面让每个自行车实例不需重写一遍*数,另一方面节约了内存。Instance variables顾名思义为每个实例所独有。
方法里声明的是local variables,方法签名括号里的是parameters。
变量的命名,看示例好了:常数NUM_GEARS
,变量numGears
。
Java语言中有八种基础数据类型,byte, short, int, long, float, double, boolean, char, 外加一种String,这九种数据类型作为fields时如果没有声明初始值,也会在类声明时被赋予默认值,local variables则不会被赋予默认值。
语法
需要加深印象的地方:
- 自增自减运算符
int i = 10;
int n = i++%5;
执行结果,i=11,n=0。
int i = 10;
int n = ++i%5;
执行结果,i=10,n=1。
-
instanceof 运算符
顾名思义 -
三元运算符
result = someCondition ? value1 : value2;