”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?
链接:[https://www.nowcoder.com/questionTerminal/6f66f55a1f844e21b580e73d36223cf7]
来源:牛客网
Static表示静态的意思,可用于修饰成员变量和成员函数,被静态修饰的成员函数只能访问静态成员,不可以访问非静态成员。静态是随着类的加载而加载的,因此可以直接用类进行访问。 重写是子类中的方法和子类继承的父类中的方法一样(函数名,参数,参数类型,反回值类型),但是子类中的访问权限要不低于父类中的访问权限。重写的前提是必须要继承,private修饰不支持继承,因此被私有的方法不可以被重写。静态方法形式上可以被重写,即子类中可以重写父类中静态的方法。但是实际上从内存的角度上静态方法不可以被重写。
链接:https://www.nowcoder.com/questionTerminal/6f66f55a1f844e21b580e73d36223cf7
来源:牛客网
static表示静态的意义,它可以修饰一个变量,一个方法,被其修饰的变量被称为类变量,被其修饰的方法成为类方法,其随着类的加载而被加载。
无法重写被private修饰的方法,因为被private修饰的父类方法在子类中是不可见的。
static修饰的方法是静态绑定的,而方法覆盖是为了实现多态,是动态绑定,所以static修饰的方法不需要被覆盖
链接:https://www.nowcoder.com/questionTerminal/6f66f55a1f844e21b580e73d36223cf7
来源:牛客网
首先是static关键字,static原意是“静态的”。
①static可以修饰内部类,但是不能修饰普通类。静态内部类的话可以直接调用静态构造器(不用对象)。
②static修饰方法, static 方法就是没有 this 的方法。在 static 方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用 static 方法。这实际上正是 static 方法的主要用途。 方便在没有创建对象的情况下来进行调用(方法/变量)。
最常见的static方法就是main,因为所有对象都是在该方法里面实例化的,而main是程序入口,所以要通过类名来调用。还有就是main中需要经常访问随类加载的成员变量。
③static修饰变量,就变成了静态变量,随类加载一次,可以被多个对象共享。
④static修饰代码块,形成静态代码块,用来优化程序性能,将需要加载一次的代码设置成随类加载,静态代码块可以有多个。
Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。
还有私有的方法不能被继承,子类就没有访问权限,肯定也是不能别覆盖的。
链接:https://www.nowcoder.com/questionTerminal/6f66f55a1f844e21b580e73d36223cf7
来源:牛客网
static是静态的意思,用于修饰成员变量和成员方法,被静态修饰的成员不能访问非静态的成员,静态成员属于类,随着类的加载而加载,可以直接被类名调用。重写是子类对父类中的方法进行重新编写,即外壳不变,核心重写,要求子类与父类方法的返回值,方法名,参数值,参数类型必须一致,子类的访问权限大于等于父类,子类方法不能抛出比父类方法更多的异常。private方法是类的私有方法,只能在类的内部被访问,不参与继承,所以不能被重写。而静态方法不能被重写分为两方面原因:一方面重写是为了实现子类实例的特殊化,但静态方法是属于类本身的,不属于实例,所以不能被重写;另一方面重写的前提是实例调用方法,由其实际类型所决定,是动态绑定的,但静态方法的调用却是由声明类型所决定,是静态绑定的,所以不能被重写只能被隐藏。
是否可以在static环境中访问非static变量?
因为静态的成员属于类,随着类的加载而加载到静态方法区内存,当类加载时,此时不一定有实例创建,没有实例,就不可以访问非静态的成员。
链接:https://www.nowcoder.com/questionTerminal/129a7ff6cfeb45ae9d456d9efed69acd
来源:牛客网
不可以在static环静中,不可以访问非static。因为静态的成员属于类,随着类的加载而加载到静态方法区内存,当类加载时,此时不一定有实例创建,没有实例,就不可以访问非静态的成员。类的加载先于实例的创建,因此静态环境中,不可以访问非静态!