华为java专业笔试材料.doc

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
,. 1. 在main(String[] args)方法内是否可以调用一个非静态方法? 答案:不能.静态成员不能访问非静态成员. 对一个类而言,包含三种最常见的成员:构造器、属性、方法。类内各成员的定义顺序没有影响,各成员之间可以相互调用,但是,static修饰的成员不能修饰没有static修饰的成员。 还记得我说的,如果类A中有一个普通方法f(),那么编译器会隐式地把它转化为f(A this)吗?那你也还记得我说,static方法就是没有这个this的方法吗? 如果A中有两个普通方法f()和g(),那么编译器会隐式地把它们变成f(A this)和g(A this)。这样,在f方法里面调用g方法的时候,编译器就可以隐式地把f方法参数中的this传递给g方法。 然而,如果f方法是static的,而g方法是非static的,那么,f方法本身就没有this参数,所以它无法隐式地提供给g方法一个this参数,因此,f方法就不能直接调用g方法了。我们有一个解决的办法,就是在f方法中手动产生一个A的对象obj,然后把这个对象当作this参数传递给g方法(obj.g()),这样就可以调用g方法了,明白了吗? 其实还可以跟你说简单一点。普通方法是对象的方法,也就是说,普通方法的调用都是跟某一个具体的对象相关联的(this),我们要用一个对象来调用它,它也可以改变这个对象属性;而静态方法是用作工具的方法,也就是说,它不跟任何对象相关联,它可以不通过对象来调用,它做的事情也不能改变任何对象的属性。明白了吗? 使用方法如下: 静态成员一般通过类名调用,也可以通过对象来调用,或者在所在类的其他方法( 可以是静态,也可以是非静态 )里直接使用(不管如何调用,只要记住一点:同类所有对象共用同一个静态成员)。但是在静态方法里,只能直接访问静态成员,不能直接访问非静态成员。(要想在静态方法里访问非静态成员,可以实例该类的一个对象,然后在通过对象调用非静态成员。)非静态成员只能通过实例调用,别无他法。 只要记住一点:把 static 成员和非静态成员彻底分隔开,他们各自作用不同,用法不同,之间没有任何联系 这个跟编译器的内存处理有关系,静态成员变量需要在一开始就分配内存进行初始化,而一般的类成员只是在类实例化的时候才会为止分配内存初始化,从方面来说,假如允许非静态类中有静态成员变量,如下面所示: class A{ public class B{ static string var_a; } } 那么在程序一开始就需要给A.B.var_a分配内存并初始化,假如这个成立了,那么A.B也应该会有相应的内存,但是由于B只是A的一个非静态成员变量,在类A还没有实例化的时候就以及有了相应的内存(也就是非静态成员变量只有在类的实例中才会有相应的内存位置),这样跟原来的标准有冲突,假如JAVA编译器(或者JAVA虚拟机)支持这种做法(其实也是可以实现的),这有的后果会导致编译器混乱无序的,大大增加了编译器的难度和复杂性,每一种语言都有预先制定好的语言标准,相对应的编译器都是基于这种标准来实现的,假如随意突破这种标准,那只会导致灾难性的后果而已 我的理解,因为静态的东西是在编译的时候就要有内存空间的,但是不是静态的东西只有当实例化的时候才会分配空间,如果你在非静态方法里面包含了静态的东西,这个方法还没有去分配空间,怎么又能为里面的变量去分配空间呢,个人理解 JVM启动的时候要先把static的东西初始化 但此时外部类可能还没有被实例化 所以会引起混乱 java的主函数写public和static的原因? public使得该函数可以被外部(Java虚拟机)调用; static使得该函数不需要任何对象便可直接被调用。 Java is not a C。下面一点是不同的。 static不能在方法中修饰变量,只能在类中申明使用! 把static int m=0;放在main()方法的上面 static 是静态的,它所修饰的东西属于类,在程序加载的时候就分配内存,而方法在被调用的时候才分配内存,所以你把一个静态变量放到一个方法中是错误的 我们运行java程序使用的是java虚拟机。虚拟机启动之后,会在.class文件里面去找一个名为main的函数,然后运行它,我们的程序便运行了。 那么你想一想,这个main函数是在它所属的类的实例产生之前就被调用的,所以它只能是static的。另外,这个main函数是虚拟机来调用的,即是外部代码来调用的,所以它只能是public的。 然后,你也可以把这个函数声明为int返回值。但是虚拟机并不需要返回状态,所以它只会找返回值为void的main,如果你定义为int,则不会当作主函数被调用。 最后,函数参数是String类型的一个数组,这个数

文档评论(0)

一叶轻舟 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档