Java的历史和演变
java是一个混合物,它是由大量继承自其他编程语言的特性中的最优元素,以及java为完成自身特殊实名所必须的创新性概念组合组成的
Java从C继承了它的语法,Java的许多面向对象特性则受C++的影响。
Java的最初推动力不是Internet,主要动机是对平台独立语言的需要
Java综述
所有计算机程序都包含两种元素:代码和数据。而且从概念上讲,程序可以围绕“正在好生生什么”进行编写的,其他一些程序则是围绕“将影响谁”进行编写的。这是控制程序如何构造的两种范式。第一种方式被称为面向过程模型。这种方式将程序描述为一系列线性步骤(即代码)。面向过程模型可以被认为是代码作用于数据。
Java中最基本的3个元素:数据类型、变量与数组
java是强类型化的语言
Java定义了8种基本类型数据:
byte、short、int、long、char、float、double和boolean
整型:byte、short、int、long(不支持无符号的、只有正值的整数)
浮点型:float和double
字符型:char(16位, C++是8位)
布尔型:boolean
Java7开始,可以使用二进制指定整型字面值(使用0b或0B)
Java7开始,在整型、浮点型字面值中可以嵌入一个或多个下划线
在Java中没有续行的转义序列
在代码块中,可以任意位置声明变量,但是只有在声明之后变量才是有效的
获得一个数组需要两个步聚,首先,必须声明一个数组类型的变量,其次,必须使用new分配该数组的内存,并将其赋给数组变量
在专业编写的Java程序中,通常采用(数组变量的声明和数组本身的分配组合起来)
int month_days[] = new int[12];
int month_days[] = {31, 28, 31};
当为多维数组分配内存时,只需要为第一维分配内存。可以单独为余下的维分配内存
数组声明:
int a1[];和int[] a1;等价
运算符
算术运算符、位运算符、关系运算符、逻辑运算符
位运算符只能用于整数
左移<<(对于每次左移,高阶位被移出并丢失,右边的位用0补充)
当对表达式进行求值时,byte和short型数值会被提升为int型
右移>>(每次右移一个值,相当于该值除以2,并丢弃所有余数)
当进行右移操作时,右移后的顶部位使用右移前顶部位的值填充。(符号扩展)
无符号右移>>>(不希望符号扩展的,高阶位都填充0)
圆括号会提升内部操作数的优先级
除了改变运算符的正常优先级之外,有时还使用圆括号帮助理清表达式的含义。圆括号不管是否多余不会降低程序的性能。
控制语句
Java语言使用控制语句,根据程序的状态变化,引导程序的执行流程和分支。
选择语句:允许程序根据表达式的输出或变量的状态,选择不同的执行路径
if和switch
switch 的表达式expression,JDK7以前必须是byte、short、int、char或枚举类型,从JDK7开始,expression也可以是String类型
迭代语句:使程序能够重复执行一条或多条语句(即迭代语句形成循环)
跳转语句:使程序能够以非线性的方式执行
break、continue、return
程序的执行控制不能跳至为没有包含break语句的代码块定义的标签
(break和continue都可以用作goto)
类
类定义了一种新的数据类型
简单的类可能只包含代码,或者只包含数据,但大多数现实中类会同时包含这两种
方法决定了类中数据的使用方式
方法和类的深入分析
重载方法:相同名称的方法(参数的类型或数量决定调用的哪个版本)
static方法只能直接调用其他静态方法,只能直接访问静态数据,不能以任何方式引用this或supder
为了初始化静态变量,如果需要进行计算,可以声明静态代码块。静态代码块只执行一次,当第一次加载类时执行
可以将变量声明为final.这么做可以防止修改变量的内容,本质上就是将变量变成了常量。这意味着final变量发须在声明时进行初始化。两种方法完成这个工作:可以在声明时为其提供一个值,或者在构造函数中为其赋值
final变量名全部使用大写,这是一种常见的编码约定。
除了可以将变量声明为final之外,方法参数和局部变量也可以声明为final.将参数声明为final,可以防止在方法中修改参数。将局部变量声明为final,可以防止多次为其赋值,final也可以用于 方法,是防止继承。
对于数组重要的一点是,它们是作为类的对象实现的。
嵌套类直接在包含类中作为成员进行声明,也可以在代码块中声明嵌套类
嵌套类有两种类型:静态的和非静态
只能在Outer类的作用域内创建Inner类的实例。
尽管嵌套类并不是对于所有情况都适用,但是当处理事件时它们特别有用
匿名内部类是没有名称的内部类
从JDK 5开始,Java提供了一个新特性,可变长度参数,可变长度通过三个句点…标识
void vaTest(int … v){}
v是作为数组进行操作的,参数将被存储在由v引用的数组中
可变长度参数的方法可以具有常规参数。可变参数必须是方法最后声明的参数,(只能有一具可变长度)
继承
继承是面向对象编程的基石之一,因为通过继承可以创建层次化分类。使用继承可以创建为一系列相关对象定义共同特征的一般类,然后其他类可以继承这个一般类
任何子类只能指定一个超类
当将指向子类对象的引用赋值给超类的引用变量时,只能访问子类对象的那些在超类中定义的部分
super有两种一般用法:用于调用超类的构造函数,访问超类中被子类的某个成员隐藏的成员(变量或方法)
super()必须总是子类构造函数中执行的第一条语句
在类层次中,从超类到子类按照继承的顺序调用构造函数。此外,因为super()必须是子类构造函数中执行的第一条语句,所以不管是否使用super(),构造函数的调用顺序都是这样。如果没有使用super(),那么将执行每个超类胡默认构造函数或无参数构造函数
方法重写(子类的一个方法和超类某个方法具有相同的名称和类型签名)
方法重写形成了动态方法调度的基础,通过这种机制可以在运行时,而不是在编译时解析对重写方法的调用。动态方法调度是实现多态的机理所在
超类引用变量可以指向子类对象
重写方法为java支持运行时多态奠定了基础。多态是面向对象编程的本质特征之一,理由之一是:多态允许一般类规定对所有继承类都通用的方法,并且允许子类定义所有这些方法或其中部分方法的特定实现。重写方法是Java实现“一个接口,多种方法”这一多态特性的另一种方式
成功应用多态的部分关键是:超类提供了子类可以直接使用的所有元素,另外还定义了派生类必须实现的方法,这允许子类可以灵活地定义自己的方法,但是仍然强制使用一致的接口。
动态的、运行时多态是面向对象设计实现代码重用和健壮性的最强大机制之一。现有代码库能够调用新类实现的方法而不需要重新编译
可以通过abstract类型修饰符,要求特定的方法必须被之类重写。这些方法有时被称作子类责任。
任何包含一个或多个抽象方法的类都必须被声明为抽象的。不能声明抽象的构造函数,也不能声明抽象的静态方法
将方法声明为final,防止子类重写该方法,同时可以提高性能(内联),对final方法的调用可以在编译时解析(早期绑定)。
也可以在类声明的前面使用final关键字,就隐式地将类的所有方法声明为final(不能同时把类声明为abstract和final)
Object类
void finalize(), 在回收不再使用的对象之前调用(依赖垃圾回收)
当使用println()输出对象时会自动调用toString方法
转载请注明:学时网 » java8学习笔记总结(一)