Java子类加static不报错,不加无法解析类型?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java子类加static不报错,不加无法解析类型?相关的知识,希望对你有一定的参考价值。

非static的内嵌类型,不能这么new,要以xxx.new 这样的形式,xxx是外层类的一个对象。
原因是:非static内层类对象不能脱离外层类对象存在
比如你这个,要这样写
animal xxx = new animal();
animal c = xxx.new mouse();
所以反过来,如果你的类之间关系不适合用内嵌类来表示(例如你这个,mouse和animal没有内嵌关系,一点都说不通),那就不要用内嵌类。
要写成static的(像pig那样),或者起一个新文件,mouse.java。追问

谢谢指点,但animal xxx = new animal();这句为什么可以解决这个问题啊(原谅我是真的萌新)

追答

一个内嵌类的对象,和包含它的类,是不可分割的,长在一起,不能独立存在。

举个栗子,不是完全恰当的

猪有猪腿,但是猪腿是猪长出来的,没有猪,不能new 一个猪腿,而是这头猪.new 猪腿那头猪.new 猪腿

这头猪的猪腿不能换到那头猪身上。

追问

谢谢回答,弄懂了欸

参考技术A 一、static不报错,了解static用法:修饰变量、方法、代码块。
1、修饰变量:如 private static int i;
2、修饰方法:如public static meth();
3、修饰代码块:static String string=new String()
二、static应用条件:
1、static方法内部使用的外部变量和方法(本方法以外的变量)时在外部必须是静态的,或对象的变量(对象:new的对象, 对象.静态变量,对象.静态方法)

java函数加不加static有何不同

java中声明为static的方法称为静态方法或类方法。静态方法可以直接调用静态方法,访问静态变量,但是不能直接访问实例变量和实例方法。静态方法中不能使用this关键字,因为静态方法不属于任何一个实例。静态方法不能被子类的静态方法覆盖。
例如:
static class CompanyEmployee{
public static string GetCompanyName(string name) { ... }
public static string GetCompanyAddress(string address) { ... }
}
一般来说,类中标注了static的函数能在类外直接引用,比如说:
String M_string1 =CompanyEmployee.GetCompanyName(M_string2)
而没有标注static的函数则必须声明一个类的实体,有实体来引用。比如说:
static class CompanyEmployee{
public string GetCompanyName(string name) { ... } //没有Staticpublic static string GetCompanyAddress(string address) { ... }
}
CompanyEmployee M_CompE = new CompanyEmployee();
String M_string1 =M_CompE.GetCompanyName(M_string2);//静态类


说白了,就是调用时候方便 不加static是非静态函数,访问需要new出该类的对象来调用,加上static是静态函数 可直接访问或者通过类名访问

你也知道,static method是类的方法,也就是在Class Loader 类加载的时候JVM会生成相应的字节码。它的生命周期是整个application。所以会一直占用内存。如果不经常使用,没有必要用static。

不加static的method就是对象的方法,必须用对象的实例来调用。并随着对象的消亡而消亡。如果频繁使用该方法,内存会不断地开辟空间、释放空间,性能会受影响。

如果一个方法在多处被调用,而且该方法的功能是一些Utility功能,比如格式化等,对于这类方法可以声明为static。

如果方法和对象关系比较紧密,需要用到对象的某些属性,就声明为该对象的方法。
























以上是关于Java子类加static不报错,不加无法解析类型?的主要内容,如果未能解决你的问题,请参考以下文章

java函数加不加static有何不同

Java中float浮点型变量不加F报错情况

java题 为啥//@Override才不报错

Java中主类中定义方法加static和不加static的区别

Java基础(42):Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在祝方法调用,后者必须先实例化后用实例调用)

在java语言中,有时候变量常量声明时要加一个“static”,有的时候不加。问一下这个词有啥用