java语法回眸
java复习
java特点
一些有关Java的专业术语
- JDK(Java Development Kit ):编写Java程序的程序员使用的软件
- JRE(Java Runtime Environment):运行Java程序的用户使用的软件
- Server JRE (Java SE Runtime Environment):服务端使用的 Java 运行环境
- SDK(Software Development Kit):软件开发工具包,在Java中用于描述1998年~2006年之间的JDK
- DAO(Data Access Object):数据访问接口,数据访问,顾名思义就是与数据库打交道
- MVC(Model View Controller):模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法
- OOP(object-oriented programming):面向对象程序设计
Java对所有参数都是按值传递的
修饰符
访问修饰符
- default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
- private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
- public : 对所有类可见。使用对象:类、接口、变量、方法
- protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
private 的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为 private
public 的类、方法、构造方法和接口能够被任何其他类访问
非访问修饰符
static 修饰符,用来修饰类方法和类变量。
final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
abstract 修饰符,用来创建抽象类和抽象方法。
synchronized 和 volatile 修饰符,主要用于线程的编程。
final
- final 变量
被 final 修饰的实例变量必须显式指定初始值
1 | final int value = 10; |
- final 方法
父类中的 final 方法可以被子类继承,但是不能被子类重写。
声明 final 方法的主要目的是防止该方法的内容被修改
- final 类
final 类不能被继承,没有类能够继承 final 类的任何特性
static
静态变量:
static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。
静态方法:
static 关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。
静态字段(静态常量)
静态变量 static final
- 静态变量或类变量(Class Variables):类变量是在类中用 static 关键字声明的变量,它们属于类而不是实例,所有该类的实例共享同一个类变量的值,类变量在类加载时被初始化,而且只初始化一次。
常量和静态变量的区别:常量也是与类相关的,但它是用 final 关键字修饰的变量,一旦被赋值就不能再修改。与静态变量不同的是,常量在编译时就已经确定了它的值,而静态变量的值可以在运行时改变。另外,常量通常用于存储一些固定的值,如数学常数、配置信息等,而静态变量通常用于存储可变的数据,如计数器、全局状态等。
总之,静态变量是与类相关的变量,具有唯一性和共享性,可以用于存储整个程序都需要使用的数据,但需要注意初始化时机和与常量的区别。
静态变量和实例变量区别:
静态变量属于类,该类不生产对象,通过类名就可以调用静态变量。
实例变量属于该类的对象,必须产生该类对象,才能调用实例变量。
静态变量的使用场景
静态变量通常用于以下场景:
- 存储全局状态或配置信息
- 计数器或统计信息
- 缓存数据或共享资源
- 工具类的常量或方法
- 单例模式中的实例变量
abstract
- 抽象类
- 抽象方法
synchronized
transient
volatile
基本数据类型及其函数
Number & Math类
[具体函数自己看](Java Number & Math 类 | 菜鸟教程 (runoob.com))
Character & String & StringBuffer类
[具体函数自己看](Java String 类 | 菜鸟教程 (runoob.com))
String concat(String str) 将指定字符串连接到此字符串的结尾。
int length() 返回此字符串的长度。
String trim() 返回字符串的副本,忽略前导空白和尾部空白。
最重要的OOP思想
类(class)
对象(object)
实例(instance)
多态
继承(inheritance)
封装(encapsulation)
方法
抽象类
重载
重写
对象是类的实例,类是对象的抽象
构造器(constructor)用来创造实例
访问器 getter setter 实现封装
1 | public class Achievement extends BaseActivity { |
继承(inheritance)
extends关键字
在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。
implements关键字
使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。
1 | public interface A { |
重写(Override)与重载(Overload)
重写(Override)是指子类定义了一个与其父类中具有相同名称、参数列表和返回类型的方法,并且子类方法的实现覆盖了父类方法的实现。 即外壳不变,核心重写!
当需要在子类中调用父类的被重写方法时,要使用 super 关键字。
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现
重写是将父类的方法逻辑重写(儿子叛逆但未变异)
重载是使同名方法有不同逻辑
方法的重写规则
- 参数列表与被重写方法的参数列表必须完全相同。
- 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)。
- 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。
- 父类的成员方法只能被它的子类重写。
- 声明为 final 的方法不能被重写。
- 声明为 static 的方法不能被重写,但是能够被再次声明。
- 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。
- 子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
- 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
- 构造方法不能被重写。
- 如果不能继承一个类,则不能重写该类的方法。
重载规则
- 被重载的方法必须改变参数列表(参数个数或类型不一样);
- 被重载的方法可以改变返回类型;
- 被重载的方法可以改变访问修饰符;
- 被重载的方法可以声明新的或更广的检查异常;
- 方法能够在同一个类中或者在一个子类中被重载。
- 无法以返回值类型作为重载函数的区分标准。
重写与重载之间的区别
区别点 | 重载方法 | 重写方法 |
---|---|---|
参数列表 | 必须修改 | 一定不能修改 |
返回类型 | 可以修改 | 一定不能修改 |
异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) |
抽象类
- 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类
- 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类
枚举类(enum)
内部类
内部类是定义在另一个类内部的类
内部类的类型
写着就明白了(帮忙简化代码的)
- 成员内部类(Member Inner Class)
- 局部内部类(Local Inner Class)
- 匿名内部类(Anonymous Inner Class)
- 静态内部类(Static Nested Class)
成员内部类定义在另一个类的内部,并且作为外部类的一个成员存在。它可以访问外部类的所有成员,包括私有成员。
局部内部类定义在方法或作用域块中。它只能在该方法或作用域块内使用。
匿名内部类是一种没有名字的内部类,通常用来简化代码,尤其是用于实现接口或抽象类的实例。
静态内部类使用 static
修饰,独立于外部类的实例。它只能访问外部类的静态成员。
1 | public class HomePage extends BaseActivity { |