黑马程序员----------static以及静态的应用

本文深入探讨了Java中的静态特性,包括代码块的工作原理、static关键字的使用及其特点,还介绍了如何利用静态特性来提高代码效率及实现资源共享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                              ----------------------android培训java培训、期待与您交流! ----------------------

简单总结一下代码、static关键字以及静态的应用。

1:代码块
    (1)局部代码块 提到代码效率
    (2)构造代码块 每new一次执行一次。
    (3)思考下面的问题
        Person p = new Person();
        它在内存中做了哪些事情?
        A:将Person.class文件加载到内存中。
        B:在堆内存中创建一个对象Person。
        C:把Person中的属性进行默认初始化。
        D:把Person中的属性进行显示初始化。
        E:调用构造代码块(如果没有,不执行这个操作)。
        F:调用构造函数进行初始化。
        G:在栈内存中声明Person类型的变量P。
        H:把堆内存的地址(引用)赋给了栈内存中P。

看几个简单的代码块试题

class MyClass{ 
static int a; 
int b; 
} 
public class TestMain{ 
public static void main(String args[]){ 
MyClass mc1 = new MyClass(); 
MyClass mc2 = new MyClass(); 
mc1.a = 100; 
mc1.b = 200; 
mc2.a = 300; 
mc2.b = 400; 
System.out.println(mc1.a); 
System.out.println(mc1.b); 
System.out.println(mc2.a); 
System.out.println(mc2.b); 
} 
} 
写出运行结果。

答案:

1. 输出结果

300

200

300

400

分析,代码块可以给变量赋值

2:static关键字
    (1)静态的意思。可以修饰类的成员(成员变量和成员方法);
    (2)静态成员的特点:
        A:随着类的加载而加载,生命周期最长。
        B:优先于对象存在。
        C:被所有的对象所共享。
        D:比非静态成员多了一种访问方式。可以通过类名直接调用。而且建议这样做。
    (3)什么时候需要使用static修饰呢?
        当类中的成员需要被所有对象共享时,用static修饰。不需要被共享时,就不用static修饰。
        简单说:共性用static修饰,特性不用static修饰。(饮水机和水杯。)
    (4)注意事项
        A:静态方法只能访问静态成员的。
        B:静态方法中不能使用this,super关键字。
        C:main是静态的。
            **格式如下:
            public static void main(String[] args)
            {
              
            }

              ***由于它被jvm调用,所以权限要足够大,所以用public权限修饰符。
              ***为了jvm可以不用创建对象直接调用它,所以用static修饰。
              ***void jvm不需要任何返回。但是方法体结尾默认有return;
              ***main jvm只认识这个名字。
              ***String[] 有可能需要传入参数。
              ***args 字符串数组的名字,为了方便使用。
    (5)静态代码块
        类中加载流程?
        静态代码块--构造代码块--构造方法。

 (静态方法)有以下代码
class Super{ 
public static void m1(){ 
System.out.println("m1 in Super"); 
} 
public void m2(){ 
System.out.println("m2 in Super"); 
} 
} 
class Sub extends Super{ 
public static void m1(){ 
System.out.println("m1 in Sub"); 
}
public void m2(){ 
System.out.println("m2 in Sub"); 
} 
} 
public class TestMain{ 
public static void main(String args[]){ 
Super sup = new Sub(); 
sup.m1(); 
sup.m2(); 
Sub sub = (Sub) sup; 
sub.m1(); 
sub.m2(); 
} 

} 
运行结果:

m1 in Super

m2 in Sub

m1 in Sub

m2 in Sub

注意,静态方法没有多态。



3:静态的应用


    工具类ArrayTool

    因为使用的都是class文件。所以你应该先编译ArrayTool,然后在编译ArrayTest,最后执行ArrayTest。

    但是如果引用的工具类特别多的情况下,这样就很麻烦,所以java提供好的方式:只编译ArrayTest即可。

    (其实它首先在classpath下找ArrayTool.class,如果没有,接下来在当前类下找ArrayTool.class文件。

     如果还没有,它就会找ArrayTool.java文件,并且进行编译。如果都没有,就报错。)

     制作工具说明书:代码中有文档注释,用javadoc解析。

     javadoc -d arrayTool -author -version ArrayTool.java

     -d 后面跟目录

     ArrayTool.java 源代码文件

     javadoc: 错误 - 找不到可以文档化的公共或受保护的类。
     改用public修饰一下即可

                                             ----------------------android培训java培训、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值