Java 语法学习笔记(四)
[TOC]
参考教程
介绍
Java 许多语法跟 C/C++,比较相似。本人学习过 C/C++/Python , 因此仅记录 Java 语法特有的部分。
Java 面向对象
类的定义
- 可以在声明成员变量的同时对其进行初始化,如果声明成员变量时没有对其初始化,则系统会使用默认值初始化成员变量
- this 关键字是 Java 常用的关键字,可用于任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用
创建对象
-
显示创建对象
new
关键字 -
隐式创建对象
字符串的操作
对象的销毁
由垃圾回收(Garbage Collection, GC) 机制自动完成
访问控制修饰符
private
、friendly
、protected
、public
默认为 friend
访问控制,只能被同一个包的类访问和引用(包访问性)
static 修饰符
-
静态变量
-
静态方法
-
静态代码块
静态代码块指 Java 类中的 static{} 代码块,主要用于初始化类,为类的静态变量赋初始值
Java 虚拟机在加载类时会执行静态代码块,如果类中包含多个静态代码块,则 Java 虚拟机将按它们在类中出现的顺序依次执行它们,每个静态代码块只会被执行一次
Java 方法的可变参数
-
语法格式
methodName({paramList},paramType…paramName)
Java 析构方法
在 Java 的 Object 类中还提供了一个 protected 类型的 finalize() 方法,因此任何 Java 类都可以覆盖这个方法,在这个方法中进行释放对象所占有的相关资源的操作
Java 包机制
包的作用
- 提供命名空间,隔离不同功能的类
- 如同文件夹一样,提供树形目录的存储方式,方便查找
- 控制访问权限
包声明
为了声明一个包,首先必须建立一个相应的目录结构,子目录与包名一致,然后在需要放入该包的类文件开头声明包
包声明应该在源文件的第一行,每个源文件只能有一个包声明。句法:package 包名;
如果一个源文件中没有使用包声明,那么其中的类,函数,枚举,注释等将被放在一个无名的包(unnamed package)中
导入包
import
关键字
类的继承
- Java 不支持多继承,但支持继承多个接口
- 系统会自动调用父类的无参构造器。如果在子类中不含有构造方法,且在父类中存在有参的构造方法而并没有重载无参的构造方法,那么在子类中必须含有有参的构造方法
Java 的重写与重载
- 子类重写父类方法,要求不能改变原方法的原型
- 重载要求必须改变方法的参数列表,且能够修改访问修饰符和产生更广泛的异常
Java 多态
-
Java 实现多态的3个必要条件:
- 继承
- 重写
- 向上转型
-
Java 多态的实现方式
- 重写
- 接口
- 抽象类和抽象方法
抽象类
- 抽象类不能被实例化
- 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类
- 抽象类中的抽象方法只是声明,不包含方法体
- 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法
- 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类
接口
- 接口类似于类,但接口的成员没有执行体,只是方法、属性、事件和索引符的组合
- 方法的声明不需要其他修饰符,在接口中声明的方法,将隐式地声明为公有的(public)和抽象的(abstract)
- 在 Java 接口中声明的变量都是常量,接口中的变量声明,将隐式地声明为 public、static 和 final,即常量
- 接口没有构造方法,不能被实例化
- 一个接口不能够实现另一个接口,但它可以继承多个其他接口
抽象类和接口的区别
-
语法
抽象类可以包含方法实现,而接口不能实现方法
-
设计思想的区别
- 抽象类和具体类概念上应该是相同和,而接口和实现的类在概念上不要求相同
- 抽象类是对一组具有相同属性和方法的逻辑上有关系的事物的一种抽象,而接口则是对一组具有相同属性和方法的逻辑上不相关的事物的一种抽象
- 抽象类表示的是“is a”关系,接口表示的是“like a”关系
内部类
在一个类内部的类,称为内部类。内部类分为实例内部类、静态内部类和局部内部类。
通过内部类可以实现类的多重继承
匿名类
匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类
new<类或接口>()
{
//类的主体
};