一 、static关键字
定义:
静态,可以修饰成员变量成员方法,修饰成员变量,此变量就是一个共享变量,会被这个类的所有对象所共享。
static关键字的特点:
1、随着类的加载而加载
2、静态所修饰的成员是优先于对象而存在的
3、被类的所有对象所共享
4、被静态所修饰的成员是属于类的建议使用类名直接调用,当然也可以使用对象调用。
5、静态变量也称之为类变量。
01.1静态方法的调用及特点
-
静态方法可以直接使用类名而调用,不需要new对象。
-
在静态方法里面不能调用非静态方法。因为静态方法里调用不到非静态成员
-
静态所修饰的成员,随着类的加载而加载的,优先于对象而存在的。因为现有的访问不到后有的。
-
在静态方法里只能访问静态所修饰的成员。
-
非静态方法既可以访问非静态成员,也可以访问静态成员。
注意:
在静态方法中不能存在this关键字。
因为this本身代表的是该类对象,对象是后来才有的。
对于提供main方法作为成员入口这个类,这个方法中,我们一般不定义成员变量
01.2静态变量与成员变量
-
静态变量属于类,也称之为类变量,成员变量属于对象向,也称之为对象变量或实例变量
-
静态变量存在方法去的静态区,成员变量存储在堆内存。
-
静态变量随着类的加载而加载,随着类的限载而卸载,成员变量随着对象向的创建而创建,随着对象的消亡而消亡。
-
静态变量可使用类名或者对象名调用,成员变量只能能使用对象调用。
二、Math类
概述
类包含用于执行基本数学运算的方法
Math类特点
由于Math类在java.lang包下,所以不需要导包。
没有构造方法,因为它的成员全部是静态的。
获取随机数的方法
public static double random():返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
我要获取一个1-100之间的随机数,肿么办?
int number = (int)(Math.random()*100)+1;
案例演示:
package com.Homework.day07;
import java.util.Scanner;
//猜数字小游戏
public class Demo {
public static void main(String[] args) {
int num= (int) ((Math.random()*100)+1);
//随机数字
for (int i = 1; i < 12; i++) {
Scanner scanner = new Scanner(System.in);
System.out.println("请您第"+i+"输入数字");
int n=scanner.nextInt();
if(i>10){
System.out.println("您输入次数已到");
}
else if(n>num){
System.out.println("您"+i+"次输入的值偏大");
break;
}else if(n<num){
System.out.println("您"+i+"次输入的值偏小");
}else {
System.out.println("您"+i+"次输入正确");
}
}
}
}
三、代码块
03.1定义:
所谓代码块就是被一对{}所括起来的代码
03.2代码块都分类:
局部代码块、构造代码块、静态代码块、同步代码块(多线程的时候讲)。
-
局部代码块:定义在方法中的代码块。
-
构造代码块:定义在类中方法外的代码块。在创建对象时会执行,优先于构造方法执行。每次创建对象都会执行。
-
静态代码块:定义在类中方法外的代码块,并且被静态所修饰,随着类的加载而加载,最早执行,**且只执行一次**。 因为类只加载一次,静态代码块里面只能访问被静态所修饰的成员。 我们经常会使用静态代码块里面做一些初始化的准备工作。
案例演示1:
package com.Homework.day07; public class Demo1 { static int i=1,j=2; static { display(i); } public static void main(String[] args) { display(j); } private static void display(int n) { System.out.println(n); } private static void show(int a){ System.out.println(a); } } 演示结果--1、2
案例演示1:
package com.Homework.day07;
public class Demo2 {
static int i=1;
static {
++i;
}
public static void main(String[] args) {
incre(i,5);
display(i);
}
private static void display(int n) {
System.out.println(n);
}
private static void incre(int n, int m) {
n+=m;
}
static {
++i;
}
}
演示结果--1、2