上课视频:
链接:https://pan.baidu.com/s/11Pz2yzEUXKyQyufibv9LKQ 密码:okge
链接:https://pan.baidu.com/s/1lPs8gdUpHk7Mip2orVftSA 密码:3lid
上课代码:
https://github.com/joychen1579/javaBaseDemos
static 关键字的作用。
1、可以通过类直接去访问,(不需要实例化出对象就可以调用函数或者变量)
2、在一个类当中成员变量用static修饰过后。该类的所有对象共用这个属性的内存地址。
3、static修饰的方法,只能调用static修饰的方法。如果想要调用非static修饰的方法,就必需通过类的对象去调用。
public class Test {
public static void main(String[] args) {
Test t = new Test();
t.fun1(); //通过对象去调用
fun1();//不能直接调用
}
public void fun1() {
fun2();
fun3();
Cat c2 = new Cat();
c2.printCat2();
}
4、非static修饰的函数可以调用static修饰的函数。在同一个类当中也可以调用非static修饰的函数,不在同一个类中需要实例化对象去调用
public void fun1() {
fun2();
fun3();
Cat c2 = new Cat();
c2.printCat2();
}
public static void fun2() {
}
public void fun3() {
}
5、static可以 修饰方法,可以static 修饰变量,也可以单独作为语语法块
修饰方法
class A
public static void fun(){
}
}
修饰变量:
class B{
public static String usernane;
}
单独语法块,也静态语法块.
在整个程序当中,第一次调用该类的时候。才会去走的代码 。
class C{
static{
代码块
}
}
上课案例:
Cat类
package com.lianwei1;
public class Cat {
static {
System.out.println("我第一被调用了");
}
public static String name; //名称
public String type; //品种
public static void printCat() {
System.out.println("我是一只小花猫");
}
public void printCat2() {
System.out.println("我会抓老鼠");
}
}
Test类
package com.lianwei1;
public class Test {
public static void main(String[] args) {
// Test t = new Test();
// t.fun1();
//
//
// Cat.printCat();
//
// Cat c = new Cat();
// c.printCat2();
//
//
// c.name="花花";
//
// c.type = "英短";
//
// Cat c2 = new Cat();
//
// System.out.println(c2.name);
// System.out.println(c2.type);
Class catClass = Cat.class;
Class perClass = Persion.class;
System.out.println(catClass.getName());
// Cat.printCat();
// Cat c = new Cat();
// c.printCat2();
// Cat c1 = new Cat();
// c1.printCat2();
}
public void fun1() {
fun2();
fun3();
Cat c2 = new Cat();
c2.printCat2();
}
public static void fun2() {
}
public void fun3() {
}
}
static 的原理
1.Class类
是用于描述java当中所有类。(类名、方法、函数、参数、成员变量......)
2.所有类在第一次使用的时候,都会实例化出一个该类的Class类对象。
3.在实例化出Class类对象的时候。会把所有有static修饰的变量、或者方法全部初使化好。
4。都先实例化在Class类的对象中。然所有的对象又用的是同一个Class对象。所以static不管在那个对象中都可以调用。
总结:
1、可以通过类直接去访问,(不需要实例化出对象就可以调用函数或者变量)
2、静态修饰变量,它是通用的。这个类所产生的对象修改的是同一个变量。
作业:
下面代码是否会通过编译,如果不能错误在那里。
public class Persion {
public int id;
public String username;
public static String sex;
public static void printInfo() {
System.out.println(id+username+sex);
}
}