static

学生类有 姓名 年龄 地址

学生的姓名年龄地址是所有对象共享的么?不是,我有我的年龄,地址你有你的

每个人不一样

小敌机有x ,y坐标,     x,y坐标能写死么?是所有小敌机x,y都一样么,不是,都是自己所特有的。

所以每个对象不一样,它就是实例的

所有对象共享的就做成静态的

成员变量分两种:
1)实例变量:没有static修饰,属于对象的,存在堆中,
           有几个对象就有几份
           通过对象名.来访问
2)静态变量:有static修饰,属于类的,存在方法区中,
           只有一份
  通过类名.来访问


堆:new出来的对象(包括实例变量)
栈:方法中的局部变量(包括参数)
方法区:.class字节码文件(包括方法、静态变量)


实例变量多,还是,静态变量多----------实例变量多
实例方法多,还是,静态方法多----------实例方法多

Scanner scan = new Scanner(System.in);
int b = scan.nextInt();
double c = scan.nextDouble(); //实例方法



建项目-----------小区
建包-------------楼号+单元号
建类-------------房子

static:静态的
  1)静态变量:
    1.1)由static修饰
1.2)属于类的,存在方法区中,只有一份
1.3)常常通过类名点来访问
1.4)何时用:所有对象所共享的数据(图片、音频、视频等)
  2)静态方法:
    2.1)由static修饰
2.2)属于类的,存在方法区中,只有一份
2.3)常常通过类名点来访问
2.4)静态方法没有隐式this传递
   所以在静态方法中不能直接访问实例成员

class Moo{
int a;
static int b;
void show(){ //有this
System.out.println(this.a);
System.out.println(Moo.b);
}
static void test(){ //没有this
//静态方法没有隐式的this传递
//没有this就意味着没有对象
//而实例变量a必须通过对象点来访问
//所以,在静态方法中不能直接访问实例成员(因为实例成员要对象去点.)
//System.out.println(a);

              System.out.println(b);//这句为什么是对的?b是静态变量,静态变量想访问需要通过对象.么?不需要,起始在b前面默认有个Moo.
System.out.println(Moo.b);
}
}
2.5)何时用:方法的操作仅与参数相关而与对象无关

 Arrays.sort(arr);
int[] a1 = Arrays.copyOf(arr,6);
double a = Math.random();  //静态方法
double b = Math.sqrt(25);

Arrays.sort(arr);-----------静态方法

无论a1,a2,a3,...,a100中的哪一个对象
去sort(arr)的最终结果都是一样的
说明sort()的操作仅与参数相关而与对象无关
假设sort()不是静态的:
  Arrays a1 = new Arrays();
  a1.sort(arr);
  Arrays a2 = new Arrays();
  a2.sort(arr);
  Arrays a3 = new Arrays();
  a3.sort(arr);

double b = Math.sqrt(25);----------静态方法
无论m1,m2,m3,...,m100中的哪一个对象
  去sqrt(25),最终的结果都是一样的
  说明sqrt()的操作仅与参数相关而与对象无关
假设sqrt()不是静态的:
  Math m1 = new Math();
  double a = m1.sqrt(25);
 
Math m2 = new Math();
  double a = m2.sqrt(25);

  Math m3 = new Math();
  double a = m3.sqrt(25);

那小敌机---step()行为适不适合写成静态的---看不同的结果一不一样------都是落,但每个小敌机落得结果不一样 ---如下图





  3) 静态块:
    3.1)由static修饰
3.2) 属于类的, 在类被加载期间自动执行
   因类只被加载一次,所以静态块也只执行一次
3.3) 何时用: 加载/初始化 静态资源(图片、音频、视频等)

class Noo{ //演示静态块
static{
System.out.println("静态块");
}
Noo(){
System.out.println("构造方法");
}
}

package oo.day05;
//static的演示
public class StaticDemo {
public static void main(String[] args) {
Loo o1 = new Loo();
o1.show();
Loo o2 = new Loo();
o2.show();
//System.out.println(Loo.b); //常常类名点来访问

Moo.test();

Noo o3 = new Noo();
Noo o4 = new Noo();
}
}

----------------------------------

案例    public class Airplane extends FyingObject implements{

   private static BufferedImage[] images;//图片首先是静态的

 Airplane a1 = new Airplane();

Airplane a2 = new Airplane();

 Airplane a3= new Airplane();

Airplane a4 = new Airplane();

 Airplane a5 = new Airplane();

Airplane a6 = new Airplane();


 public Airplane(){

images =读取图片 //可以在这给Images赋值,但有个问题,每创建一个对象,我们都读一次图片

那其实读图片其实一次就够了,所以读图片这事我们往静态块放

static{//只走一次
images = new BufferedImage[5]; //5张图片
for(int i=0;i<images.length;i++){
images[i] = loadImage("airplane"+i+".png");
}
}

j静态块 静态变量 静态方法的运用


}



}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值