静态方法与非静态方法的区别
例如:
public class Person{
public int age;
public static double height;
public static String Address(String x){
System.out.println("address:"+x);
}
public int Birthday(int x){
System.out.println("birthday is "+x+" month");
}
public static void main(String[] args){//静态方法
age=24; //引用了非静态数据成员
height=173;
Address("xi'an");
Birthday(5); //引用了非静态方法
}
}
编译时,就会出现无法从静态上下文中引用非静态变量age和非静态方法Birthday(int)的错误。
还有一点就是静态方法不能被覆盖,有一个形象的例子引自http://blog.csdn.net/rujiao/archive/2009/01/13/3764115.aspx
首先我们提供两个类,基类为Parent,派生类为Child。在Parent中我们提供两个方法,一个是静态方法staticMethod(),一个是非静态方法nonStaticMethod()。在Child类中我们覆盖着两个方法。
class Parent
{
public void nonStaticMethod()
{
System.out.println("parent's Non-Static Method is Called");
}
public static void staticMethod()
{
System.out.println("parent's static method is called");
}
}
class Child extends Parent
{
public void nonStaticMethod()
{
System.out.println("child's non-static method is called");
}
public static void staticMethod()
{
System.out.println("child's static method is called");
}
}
在Test类中我们分别使用Parent p1 = new Parent(),Parent p2 = new Child(),Child c = new Child()得到三个实例,并分别调用静态方法和非静态方法,我们来看程序的运行结果
public class Test
{
public static void main(String args[])
{
Parent p1 = new Parent();
Parent p2 = new Child();
Child c = new Child();
System.out.print("parent.static: "); Parent.staticMethod();
System.out.print("p1.static: "); p1.staticMethod();
System.out.print("p2.static: "); p2.staticMethod();
System.out.print("p1.nonStatic: "); p1.nonStaticMethod();
System.out.print("p2.nonStatic: "); p2.nonStaticMethod();
System.out.print("Child.static: "); Child.staticMethod();
System.out.print("c.static: "); c.staticMethod();
System.out.print("c.nonStatic: "); c.nonStaticMethod();
}
}
程序的运行结果为:
Parent.static: parent's static method is called
p1.static: parent's static method is called
p2.static: parent's static method is called
p1.nonStatic: Parent's Non-Static Method is Called
p2.nonStatic: child's non-static method is called
Child.static: child's static method is called
c.static: child's static method is called
c.nonStatic: child's non-static method is called
值得注重的是p2实际上是一个Child的类型的引用,然而在调用静态方法的时候,它执行的却是父类的静态方法,而不是Child的静态方法,而调用 p2的非静态方法的时候执行的是Child的非静态方法,为什么呢?原因是静态方法是在编译的时候把静态方法和类的引用类型进行匹配,而不是在运行的时候 和类引用进行匹配。因此我们得出结论:当我们在子类中创建的静态方法,它并不会覆盖父类中相同名字的静态方法。
静态方法与非静态方法的区别相关推荐
- C#中静态方法和非静态方法的区别
静态方法和非静态方法的区别: 1.静态方法不需要类实例化就可以调用,反之非静态方法需要实例化后才能调用: 2.静态方法只能访问静态成员和方法,非静态方法都可以访问: 3.静态方法不能标记为overri ...
- php 静态方法特点,浅析php静态方法与非静态方法的用法区别
在php编程中,static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为"类属性"或"类方法" 如果访问控制 ...
- java静态方法和非静态方法的区别_史上最全阿里 Java 面试题总结
关注[ToBeTopJavaer],回复[答案],获取全套面试题答案,为明年的金三银四,做好充分的准备. JAVA基础 JAVA中的几种基本数据类型是什么,各自占用多少字节. String类能被继承吗 ...
- java中静态方法与非静态方法的区别及非静态方法的注意事项
一旦使用static修饰成员方法,那么这就成为了静态方法.静态方法不属于对象,而是属于类的. 如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用它. 如果有了static关键字,那 ...
- 静态方法与非静态方法区别
一.静态方法 静态方法又称类方法,是加staic关键字修饰的方法,在类定义的时候就被分配和装载入内存中. 静态方法属于类所有,类实例化前即可使用,同时不能使用super和this关键字. 静态方法只能 ...
- 静态方法和非静态方法的区别JAVA
最近在写JAVA程序的时候报了一个错. No enclosing instance of type FileRead is accessible. Must qualify the allocatio ...
- 静态方法和非静态方法区别?
静态方法static(类方法)和 非静态方法(实例方法)的区别: 方法我们主要分为三种: 1.构造方法 2.静态方法(类方法) 3.非静态方法(普通方法/实例方法/成员方法) 对于1(补充一下):构造 ...
- java中synchronized修饰静态方法和非静态方法有什么区别?
Synchronized修饰非静态方法 Synchronized修饰非静态方法,实际上是对调用该方法的对象加锁,俗称"对象锁". Java中每个对象都有一个锁,并且是唯一的.假设分 ...
- 使用synchronized修饰静态方法和非静态方法有什么区别
前言 最近被问到了这个问题,第一次回答的也是很不好,在此参考网上答案进行整理记录.供大家学习参考. Synchronized修饰非静态方法 Synchronized修饰非静态方法,实际上是对调用该方法 ...
最新文章
- Laravel 上使用 phpexcel的两种方式
- C语言实现测量数据处理,求出实际值的范围
- 纯CSS3实现轮播图
- 利用docker编译Android源码
- MySQL中varchar所占字节大小是多少
- 代码传奇 | 明明可以靠颜值 却用代码把人类送上了月球的女人——Margaret Hamilton
- 装饰器模式和代理模式的区别
- 【假期重磅福利】更新三个Oracle系列课程,共153课时,最低免费获取
- SQL Server数据库中的T-SQL如果存在语句概述
- 小程序的switch组件
- Python爬虫实战 --实现 QQ空间自动点赞
- mysql 统计函数 双条件_使用COUNTIFS函数统计符合多个条件的单元格的方法
- 裁判文书网2019年9月份最新爬虫
- C#开发斑马RFID打印机zt410
- 【数据分析师_04_Python数据分析基础】006_Pandas时序分析(df.tz_localize 时区位置、df.tz_convert 时区转换)
- 酚酸靶向助力组合消毒剂在新鲜农产品中的应用研究
- QIIME2进阶五_QIIME2扩增子基因序列多样性分析
- 联想拯救者7000充不上电的解决办法
- 返回结果的HTTP状态码-HTTP(四)
- 大学物理——原子间相互作用力