JAVA基础再回首(五)——static关键字、main方法、java Api帮助文档的使用、Math类、代码块
一、static关键字
- 可以修饰成员变量和成员方法
- static关键字特点
- 随着类的加载而加载
- 优先于对象存在
- 被类的所有对象共享
- 这也是我们判断是否使用静态关键字的条件
- 可以通过类名调用
我们一起来写一个Demo
public class StudentDemo {
public static void main(String[] args) {
Student s = new Student();
System.out.println(s.num);
System.out.println(Student.num2);
System.out.println(s.num2);
}
}
class Student {
//非静态变量
int num = 10;
//静态变量
static int num2 = 20;
}
输出结果:10 20 20
可以看到,我们可以通过类名调用
-
static关键字注意事项
- 在静态方法中是没有this关键字的
- 静态方法只能访问静态的成员变量和静态的成员方法
我们怎么理解呢?
1.静态是随着类的加载而加载,this是随着对象的创建而存在。
2.静态比对象先存在。
3.在静态方法:
成员变量:只能访问静态变量
成员方法:只能访问静态成员方法
4.非静态方法:
成员变量:可以是静态的,也可以是非静态的
成员方法:可是是静态的成员方法,也可以是非静态的成员方法。
简单的理解就是静态只能访问静态。
我们学习了static关键字,那么来继续学习一下静态变量和成员变量的区别吧。
A:所属不同
静态变量:属于类,类变量
成员变量:属于对象,对象变量,实例变量
B:内存位置不同
静态变量:方法区的静态区
成员变量:堆内存
C:生命周期不同
静态变量:静态变量是随着类的加载而加载,随着类的消失而消失
成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失
D:调用不同
静态变量:可以通过对象名调用,也可以通过类名调用
成员变量:只能通过对象名调用
main方法
说起main方法,首先main方法是静态的
- public static void main(String[] args) {}
- public 被jvm调用,访问权限足够大。
- static 被jvm调用,不用创建对象,直接类名访问
- void被jvm调用,不需要给jvm返回值
- main 一个通用的名称,虽然不是关键字,但是被jvm识别
- 函数的参数:参数类型是一个数组,该数组中的元素是字符串,字符串类型的数组
Java帮助文档的简单使用
我们要学习java中的一些类,那么我们就要学习如何使用帮助文档,最后我会给大家上传帮助文档,让大家学习使用。我来简单的说下帮助文档的简单使用。
- 1:打开帮助文档
- 2:点击显示,找到索引,看到输入框
- 3:知道你要找谁?以Scanner举例
- 4:在输入框里面输入Scanner,然后回车
- 5:看包
- java.lang包下的类不需要导入,其他的全部需要导入。
- 要导入:java.util.Scanner
- 6:再简单的看看类的解释和说明,别忘了看看该类的版本
- 7:看类的结构
- 成员变量 字段摘要
- 构造方法 构造方法摘要
- 成员方法 方法摘要
- 8:学习构造方法
- A:有构造方法 就创建对象
- B:没有构造方法 成员可能都是静态的
-
9:看成员方法
- A:左边
- 是否静态:如果静态,可以通过类名调用
- 返回值类型:人家返回什么,你就用什么接收。
- B:右边
- 看方法名:方法名称不要写错
- 参数列表:人家要什么,你就给什么;人家要几个,你就给几个
Math类
上面我们学习了帮助文档的使用,学习java中的类就方便多了。一起来学习Math类吧。
- A:左边
Math类包含用于执行基本数学运算的方法。
- 由于Math类在java.lang包下,所以不需要导包。
特点:没有构造方法,因为它的成员全部是静态的。
话不多学,写获取随机数的Demo吧。
class MathDemo {
public static void main(String[] args) {
//获取一个随机数
double d = Math.random();
System.out.println(d);
}
}
输出结果:
可以看到得到的结果是小于1的大于0的一个随机数,那么,我们要获取1–100直接的随机数肿么办呢?
public class MathDemo {
public static void main(String[] args) {
int x = 0;
//获取一个1-100之间的随机数
for (int i = 0; i < 100; i++) {
x = (int) (Math.random()*100)+1;
}
System.out.println(x);
}
}
输出结果:
可以看到结果是一个大于1小于100的一个整数。当然Math类还有很多的用法,比如求最大值、最小值等。大家下去之后可以多练习练习。
代码块
首先我们了解代码块的概念
在Java中,使用{}括起来的代码被称为代码块,根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(以后多线程中我们学习)。
- 局部代码块
在方法中出现;限定变量生命周期,及早释放,提高内存利用率
- 构造代码块
在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
作用:可以把多个构造方法中的共同代码放到一起,对对象进行初始化。
- 静态代码块
在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次。
作用:一般是对类进行初始化。
学习了上面的概念,你知道静态代码块,构造代码块,构造方法的执行顺序吗?我们一起来写一个Demo吧。
public class CodeDemo {
public static void main(String[] args) {
//局部代码块
{
int x = 10;
System.out.println(x);
}
{
int y = 20;
System.out.println(y);
}
System.out.println("---------------");
Code c = new Code();
System.out.println("---------------");
Code c2 = new Code();
System.out.println("---------------");
Code c3 = new Code(1);
}
}
class Code {
//静态代码块
static {
int a = 1000;
System.out.println(a);
}
//构造代码块
{
int x = 100;
System.out.println(x);
}
//构造方法
public Code(){
System.out.println("code");
}
//构造方法
public Code(int a){
System.out.println("code");
}
//构造代码块
{
int y = 200;
System.out.println(y);
}
//静态代码块
static {
int b = 2000;
System.out.println(b);
}
}
输出结果:
结果是否和你想的一样呢。
我们现在就可以得到一个结论了。
静态代码块 – 构造代码块 – 构造方法
静态代码块:只执行一次
构造代码块:每次调用构造方法都执行
JAVA Api 1.8:http://download.csdn.net/detail/m366917/9592210