首页 > 编程知识 正文

java中有静态类吗,静态和非静态的区别Java

时间:2023-05-06 10:41:28 阅读:220885 作者:3734

一、静态类和非静态的定义

        1、非静态

            一、有名类

class Eat{//不可以直接在main方法中使用 必须创建对象void sleep() {}}

             二、匿名类

Example example =new Example() { };

        2、静态

             一、有名类

static class Eat1 {//可以在main的静态方法中调用 void sleep1(){System.out.println("");}}

             二、匿名类

static Example example1 =new Example() {//静态匿名内部类的使用};

        3、总结

            有名类中把static加到class前,匿名类的把static 加到表达式前面

二、静态类中需要注意:

        1、通过类名调用对象

public class Test {public static class Eat {void speak() {System.out.println("");}}public static void main(String[] args) {Eat eat =new Test.Eat();}}

        此处的 Test.Eat();就是通过类名调用对象

        2、静态类只能直接定义在外部类里面:

        非静态内部类的定义可以定义在内部类的方法、代码块中,而静态内部类只能在外部类的外部(即成员变量的位置)

        3、静态内部类仅能直接访问外部类的静态成员变量和方法,可以通过创建外部类的对象间接使用非静态的成员变量和方法。

        正如静态方法中可以直接调用静态方法,而只能通过对象来调用非静态方法和属性一样,此类型一致:

        静态方法和属性的内存分配和赋值从类运行的,所以一旦在静态的方法中使用非静态的成员变量(不经过创建对象),这时非静态变量【创建对象时执行】的执行不会分配空间,所以报错;

4、在静态类中可以定义静态属性,在非静态的类中不可以定义静态属性//静态方法中也不可定义静态属性(局部区域)

public static class Eat {//正确static int age;}

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。