static
是什么意思?
我知道 public
表示可以从类外部访问,而 private
只能在类内部访问…
静态意味着可以在不实例化类的情况下进行访问。这对于常量很好。
静态方法需要对对象的状态没有影响。除了参数外,它们可以有局部变量。
可修改的静态变量是有风险的。它们的行为类似于全局变量,可能会导致应用程序脆弱。跟踪变量的修改位置可能会很困难。
静态方法是没有风险的。它们可以替代重复的代码,增加代码经过充分测试和正确的可能性。
public: 公共的声明可以被任何地方访问。
protected: 受保护的限制对继承和父类(以及定义该项的类)进行访问。
private: 私有的仅限于定义该项目的类看到。
static: 静态变量仅存在于局部函数作用域中,但当程序执行离开该作用域时,它不会失去其值。
final: final关键字通过在定义前缀一个final来防止子类覆盖方法。如果类本身被定义为final,则不能扩展。
除PHP之外:
transient: 瞬态变量是不能被序列化的变量。
volatile: 声明为volatile的变量可能会被多个线程同时修改。声明为volatile的变量不会被编译器优化,因为它们的值随时可能会改变。
从http://php.net/manual/zh/language.oop5.static.php:
将类属性或方法声明为静态的,可以在不需要实例化该类的情况下访问它们。 声明为静态的属性不能使用实例化的类对象访问(尽管静态方法可以)。
static
关键字时,我们不能使用 $this
。class Foo {
private $foo='private';
private function priv_func() {
echo 'priv_method';
}
public static function get() {
echo $this->foo;
$this->priv_func();
}
}
$obj = new Foo();
$obj->get();
self
来访问同一类中的静态方法和静态变量。例如:self::priv_func();
- Markus Zeller例子:
public class Methods_Test1
{
public static void Display(String Name)
{
System.out.println("Hello There " + Name);
System.out.println("I am from Display method");
}
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.println("Enter name");
String name = sc.next();
Obj.Display(name);
}
公共静态void Display(String name)方法可以在其自己的类中作为静态方法访问,可以在不创建该类的对象的情况下访问,而对于外部类而言,相同的方法则行为为public,可以通过创建对象来访问。
Obj.Display(name);
处。 - Rohan Devaki