java基础之static的使用笔记

本文详细介绍了Java中static的使用,包括修饰内部类、变量、方法和代码块的效果。重点讲解了静态内部类的特性,静态变量和方法的共享性,以及静态代码块的执行时机。通过一个综合案例展示了static的综合运用,并分析了构造顺序和成员访问规则。
摘要由CSDN通过智能技术生成

static可以修饰在内部类、方法、变量和代码块上。

1.static修饰在内部类上

首先什么是内部类?
内部类就是在一个类的内部又定义了一个类,内部类可以访问其所在内的所有的属性(包括私有属性!!!)
静态内部类相对于外部类是独立存在的,在静态内部类中无法访问外部类的变量和方法,若要访问则必须new一下外部类 ,使用new出来的对象访问外部类的变量和方法和非静态变量和非静态常量。但是却可以访问静态变量和静态方法。

2.static修饰在变量上

static修饰的变量(静态变量或叫类变量)被所有的实例共享(对象或者类本身),不会依赖于对象,静态变量在内存中只进行一次拷贝,在JVM中只分配一次内存。

3.static修饰在方法上

static修饰的方法称之为静态方法,静态方法只属于这个类本身,不属于某个对象,静态方法不能被重写,可以类名来直接调用。在静态方法中不能使用this和super关键字(this指向的是当前对象,而super相当于指向当前对象的父类,两者可以相当于对象的一种属性)

static修饰在代码块上

static修饰的代码块叫静态代码块,静态代码块在整个类加载的过程中只会被执行一次,静态代码块可以有多个,有多个会先后顺序依次执行,静态代码块通常用作程序优化。
以下是一个使用static的综合案例

public  class  TestStaticDemo  extends  TestDemo{
    public static int a =1;
    public String b = "b";
    public TestStaticDemo(){
        System.out.println("TestStaticDemo...被构造了");
    }
    public static void aa(){
        System.out.println("静态方法aa被执行");
    }

    static class Demo1{
        public Demo1(){
//            TestStaticDemo testStaticDemo = new TestStaticDemo();
//            String b =testStaticDemo.b;
            a=2;
            System.out.println("Demo....被构造了"+a);
        }
    }
    static {
        System.out.println("static...1");
    }

    public static void main(String[] args) {
        new Demo1();
    }
}
public class TestDemo {
    public TestDemo(){
        System.out.println("TestDemo被构造了。。。");
    }
    static {
        System.out.println("static....2");
    }
}

输出结果为:
在这里插入图片描述
这里主要涉及到一个执行先后的事情,执行开始,先找到main方法,执行main方法前肯定要先加载TestStaticDemo类,而TestStaticDemo继承TestDemo,所以会先去加载TestDemo类,在TestDemo类中有代码块,所以先执行TestDemo中的static块,在TestDemo加载完成后就会加载TestStaticDemo类,同理有static会先执行,最后执行new Demo1()方法。
idea提示我们b要为一个static内容
idea提示我们b要为一个static内容。根据静态内部类的规则修改代码。

    static class Demo1{
        public Demo1(){
            TestStaticDemo testStaticDemo = new TestStaticDemo();
            String b =testStaticDemo.b;
            System.out.println("Demo....被构造了"+b);
        }
    }

new出外面类对象 可以得到b的值(关于构造顺序,java会通过一层层的继承关系,先执行父类的构造方法)
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值