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