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 修饰符,用来创建抽象类和抽象方法。

  • synchronizedvolatile 修饰符,主要用于线程的编程。

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))

最重要的OOP思想

  • 类(class)

  • 对象(object)

  • 实例(instance)

  • 多态

  • 继承(inheritance)

  • 封装(encapsulation)

  • 方法

  • 抽象类

  • 重载

  • 重写

对象是类的实例,类是对象的抽象

构造器(constructor)用来创造实例

访问器 getter setter 实现封装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Achievement extends BaseActivity {

//instance fields
private int achievementId;
private String title;
private boolean isfinished;

//constructor
public Achievement(int achievementId, String title, boolean isfinished) {
this.achievementId = achievementId;
this.title = title;
this.isfinished = isfinished;
}

//method
public int getAchievementId() {
return achievementId+1;
}
public String getTitle() {
return title;
}

public boolean isIsfinished() {
return isfinished;
}


public void setIsfinished(boolean isfinished) {
this.isfinished = isfinished;
}

}

继承(inheritance)

extends关键字

在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。

implements关键字

使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。

1
2
3
4
5
6
7
8
9
10
11
public interface A {
public void eat();
public void sleep();
}

public interface B {
public void show();
}

public class C implements A,B {
}

重写(Override)与重载(Overload)

  • 重写(Override)是指子类定义了一个与其父类中具有相同名称、参数列表和返回类型的方法,并且子类方法的实现覆盖了父类方法的实现。 即外壳不变,核心重写!

    当需要在子类中调用父类的被重写方法时,要使用 super 关键字。

  • 重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

  • 方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现

重写是将父类的方法逻辑重写(儿子叛逆但未变异)

重载是使同名方法有不同逻辑

方法的重写规则

  • 参数列表与被重写方法的参数列表必须完全相同。
  • 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)。
  • 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。
  • 父类的成员方法只能被它的子类重写。
  • 声明为 final 的方法不能被重写。
  • 声明为 static 的方法不能被重写,但是能够被再次声明。
  • 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。
  • 子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
  • 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
  • 构造方法不能被重写。
  • 如果不能继承一个类,则不能重写该类的方法。

重载规则

  • 被重载的方法必须改变参数列表(参数个数或类型不一样);
  • 被重载的方法可以改变返回类型;
  • 被重载的方法可以改变访问修饰符;
  • 被重载的方法可以声明新的或更广的检查异常;
  • 方法能够在同一个类中或者在一个子类中被重载。
  • 无法以返回值类型作为重载函数的区分标准。

重写与重载之间的区别

区别点 重载方法 重写方法
参数列表 必须修改 一定不能修改
返回类型 可以修改 一定不能修改
异常 可以修改 可以减少或删除,一定不能抛出新的或者更广的异常
访问 可以修改 一定不能做更严格的限制(可以降低限制)

抽象类

  • 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类
  • 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类

枚举类(enum)

内部类

内部类是定义在另一个类内部的类

内部类的类型

写着就明白了(帮忙简化代码的)

  1. 成员内部类(Member Inner Class)
  2. 局部内部类(Local Inner Class)
  3. 匿名内部类(Anonymous Inner Class)
  4. 静态内部类(Static Nested Class)

成员内部类定义在另一个类的内部,并且作为外部类的一个成员存在。它可以访问外部类的所有成员,包括私有成员。

局部内部类定义在方法或作用域块中。它只能在该方法或作用域块内使用。

匿名内部类是一种没有名字的内部类,通常用来简化代码,尤其是用于实现接口或抽象类的实例。

静态内部类使用 static 修饰,独立于外部类的实例。它只能访问外部类的静态成员。

1
2
3
4
5
6
7
8
9
10
11
12
public class HomePage extends BaseActivity { 
//内部类
private ImageButton btnZhaomu;
btnZhaomu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = Achievement_Activity.newIntent(HomePage.this);
startActivity(intent);
finish();
}
});
}