Java学习回忆录-基础理论-010
有关Random类的问题
1. 在 Random 中,nextdouble方法没有参数,它所形成的随机数是在0.0到1.0 之间,
e.g.:
0.7522897717363257 0.4008497619789346
0.18415833785621571 0.5114614853027969
0.10363322833807531 0.5971543724125803
0.2298510047039578 0.7846149737270781
0.5134294882743867 0.4669089760027143
2.
如果需要在指定的区间比如 10 到 20 之间生成随机数,可以先生成 0 ~ 10 之间的随机数,然后在加上 10。
final关键字
概述:表示最终的意思,可以修饰变量,但是被它修饰的变量其实是一个常量,只能赋值一次
理解:可以像C里面的一样,定义常量变量,用来代替某些常出现的数值
final int NUM = 20; // 举例
1. final 修饰方法
父类不希望子类去重写他的部分方法,可以将这类方法使用final 修饰. 这样的话,子类只能继承,而不能重写. (子类只能用,不能修改)
举例:
设计一个父类,具备吃,喝的行为.
设计一个子类,子类继承父类。子类中没有定义特有的属性和行为, 是直接继承了父类的吃和喝的行为。
问题:
时代在变,子类继承的父类的吃和喝的行为,不满足子类的要求了。子类希望重写父类的吃和喝的行为。
解决问题:
子类通过重写特性(Override) 重写了父类的吃和喝的行为.
新的问题
父类发现,子类重写后,对父类的行为改动太大,父类不希望子类去修改,仅仅希望子类继承就可以了…
解决问题:
父类不希望子类去重写他的部分方法,可以将这类方法使用final 修饰. 这样的话,子类只能继承,而不能重写. (子类只能用,不能修改)
总结:
一个方法被final 修饰,特点: 该方法不能被子类重写(子类不能改了),子类只能用.
2. final 修饰类
最终类, 继承体系到此终结
父类发现子类总是会重写他的方法. 很累, 父类干脆不希望子类再继承他了… 这样话,子类无法继承,子类也就不再能够重写父类的方法了… (断绝关系)
需求: 定义的一个类,不再希望被继承.
解决: 使用final 修饰类.
总结: 一个类被final 修饰,该类不能有子类(无法被继承),但是这个类虽然被final 修饰了,不能有子类, 自己还是可以创建对象的…
3. final可以修饰成员变量
final 修饰的成员变量,变为了常量,这样的常量,一旦声明并初始化好,就无法修改了…
final修饰的成员变量在初始化的时候必须要赋值,否则会报错。(其实想一下,如果不赋值,之后又不能修改,那这个常量就没有意义了)
static关键字
1. static变量
静态变量.
语法:
static 数据类型 变量名 = 值;
static int accountnum = 0; // 举例
被static 修饰的成员变量,称之为静态变量.
**特点: **
1. 随着类的加载而加载,存在于方法区
跟之前的普通的非static 修饰的成员变量,是不一样. 需要等着对象的创建,才会在堆内粗中初始化.
2. 独立于对象存在.
类已加载,静态变量就初始化,不依赖于对象. 不需要创建对象.就可以使用.
3. 可以被所有对象所共享
类只加载一次, 随着类的加载而出现的静态变量,在内存中也只有1个.
很重要,内存中只有1份,在方法区)
4. 可以直接通过类名来访问(类名.成员变量)
这种成员变量是静态的, 不依赖于对象,访问这些静态变量时,不用再创建对象来访问(简单)
2. static 方法.
被static 修饰的方法,称之为静态方法.
特点:
可以直接通过类名来调用.
不依赖于对象.
注意:
1. 静态方法,只能访问静态(静态变量,静态方法)不能访问非静态的内容.
2. 静态方法中可以直接调用静态属性,但是静态方法中没有this关键字(静态方法中,不能出现this和super)。
因为没有被static修饰的属性是随着对象的创建而存在,而只有在创建对象的时候才会有this关键字,并且this 表示的是一个对象的引用(地址). 静态方法的执行不依赖于对象的. 可以直接通过类名来调用。所以静态方法中没有this关键字
static(静态)的弊端
在一个类中声明了非静态成员变量、静态成员变量、非静态成员方法、静态成员方法。
1. 在非静态的成员方法中.尝试去访问:
静态变量 ok
非静态成员变量 ok
静态成员方法 ok
非静态成员方法 ok
总结:在非静态的成员方法中,既可以访问静态的,也可以访问非静态的内容.
原因: 非静态的成员方法, 依赖于对象才能执行, 创建了对象,通过对象来调用的. 对象都创建了,类必然早就加载了. 都可以访问到.
2. 在静态的方法中,尝试去访问:
非静态成员变量 no
非静态成员方法 no
静态变量 ok
静态方法 ok .
总结: 在静态方法中,只能访问静态的内容(静态变量,静态方法)
原因: 静态的方法,随着类的记载,就可以调用,只要类加载完毕,就可以通过类名.静态方法的形式调用,不依赖于对象.
总结:
不能访问那些需要对象的 非静态变量和非静态方法...
即早出现->不能访问晚出现...
类:早 -> 只要被类加载器(系统)加载进内存,就存在了.
对象:晚 -> 创建对象 new 才出来
静态的应用场景:
设计工具类.
数组操作数组的...
基本应用中.
举例:设计一个工具类
工具类,没有必要创建对象,会将工具类中的属性和方法都使用static 修饰.
1. 定义一个类
2. 将这个类的构造方法私有
3. 设计方法
例如: 操作数组的工具类.在类中编写,操作数组一些核心方法.
4. 使用工具类:类名.方法