JavaSE学习笔记 Day12

JavaSE学习笔记 Day12

个人整理非商业用途,欢迎探讨与指正!!
« 上一篇


文章目录

  • JavaSE学习笔记 Day12
    • ···
      • 10.3static
        • 10.3.1修饰属性
        • 10.3.2修饰方法
        • 10.3.3修饰代码块
        • 10.3.4类的加载时机
        • 10.3.5静态引入(理解即可)


···

10.3static

表示静态的
修饰属性,方法,代码块,内部类,以及静态引入

10.3.1修饰属性

表示静态属性,属于类,所有对象共享
类加载时,静态属性立刻加载,存在于方法区之内
可以使用对象调用,但不建议这么做
使用类名直接调用

package com.qf.pojo;

public class Student {

//	定义一个计数,计算创建了多少个对象
	static int count = 0;
	
	public Student() {
//		计数的操作
		count ++;
	}
	
	public static void main(String[] args) {
//		static修饰的属性,被称为类属性,所有对象共享的
//		类加载时,就直接创建,比创建对象的时间要早很多
		
//		对象的加载过程:1.开辟空间 2.加载属性 3.构造中的方法
//		属性(实例变量是每个对象独立的)
		Student stu1 = new Student();
		System.out.println(stu1.count);
		
		Student stu2 = new Student();
		System.out.println(stu2.count);
		
		new Student();
		new Student();
		new Student();
		new Student();
		new Student();
		System.out.println(Student.count);//类属性,直接使用类名调用
	}
}
10.3.2修饰方法

表示静态方法,类方法
在方法区的静态区中存在,属于所有对象的
类加载的同时加载
直接使用类名调用
需要注意:*****
 1.静态方法可以调用类中的任意静态资源
 2.静态方法中不能调用this和super,不能调用实例资源
 3.抽象方法不能被static修饰
 4.静态方法不能被重写,但是可以被继承

package com.qf.pojo;

public abstract class Dog {

	int a = 10;
	static int b = 10;
	
	public void test01() {
		System.out.println(this.a);
	}
	
	public static void test() {
		System.out.println("嗨嗨嗨");
	}
//	jvm加载的,是一个程序入口
	public static void main(String[] args) {
//		1.静态资源可以直接调用
		test();
//		a属于对象,static修饰是类加载时就会存在,这个时候还没有对象的
//		System.out.println(a);
		System.out.println(b);
		System.out.println(Dog.b);
//		2.静态的不能调用实例的(对象,this,super)
//		System.out.println(new Dog().a);//加载对象去调用实例的成员
//		System.out.println(this);
//		System.out.println(super);
//		3.抽象方法不能和static一起用
		System.out.println("----------------");
//		4.静态方法不能被重写,但可以被继承
		SmallDog.test();
		Dog d = new SmallDog();
		d.test();//嗨嗨嗨
	}
//	抽象的是用来被继承的,被继承就说明需要有子类或者父类对象
//	public abstract static void test02();
}

class SmallDog extends Dog{
//	SmallDog中的test方法
//	不能发生多态,就不是重写
	public static void test() {
		System.out.println("123");
	}
}
10.3.3修饰代码块

代码块

 语法 {}
 可以存在于类中和方法中的

作用:用于初始化数据的
实例代码块:没有static修饰的,在构造之前调用,每次创建对象时都会调用
静态代码块:类加载时,静态代码块就加载了,只被加载一次

package com.qf.pojo;

public class Cat {
//	静态代码块只调用一次
	static {
		System.out.println("我是静态代码块");
	}
//	略早于构造时调用
	{
		System.out.println("我是实例代码块");
	}
	public Cat() {
		System.out.println("Cat()");
	}
	public void test01() {
		{
			System.out.println("代码块");
		}
	}
	
	public static void main(String[] args) {
		new Cat();
		new Cat();
		new Cat();
	}
}
10.3.4类的加载时机

创建对象时
创建子对象时
调用静态资源时(静态属性,静态方法)
反射:Class.forName(“全限定名”);
 全限定名:包名+类名

10.3.5静态引入(理解即可)

直接引入其他类中的静态资源为当前类使用
工具类中有很多方法都是静态的,例如:Math

package com.qf.pojo;

import static java.lang.Math.E;//引入Math中的E
import static java.lang.Math.PI;
import static java.lang.Math.*;

public class Test01 {

	public static void main(String[] args) {
		System.out.println(Math.PI);
		System.out.println(Math.E);
		
//		通过静态引入的可以不用类名调用
		System.out.println(E);
		System.out.println(PI);
		
		System.out.println(Math.random());
		System.out.println(random());
	}
}

你可能感兴趣的:(JavaSE,学习,笔记,java)