静态方法中怎么c 调用非静态方法法

静态方法不能调用非静态的变量和方法
静态方法不能调用非静态的变量和方法:因为静态是随着累的加载而加载的也就是说类只要存在了,那么静态就存在了,而静态是优先于对象存在的。
你要访问非静态的东西,也就是非静态的成员(包括变量和方法),非静态的东西还没存在你怎么访问的到?吗?楼主好好想一下就能明白了下面那个是我学习时的笔记你看一下吧。
静态:static
用法:是一个修饰符;用于修饰成员(成员变量和成员函数)
当成员被静态修饰后,就多了一种调用方式,除了可以被对象调用外,还可以直接被类名调用格式:类名.静态成员
静态的特点:
1.随着类的加载而加载
也就是,说静态会随着类的消失而消失,说明静态的生命周期最长
2.优先于对象的存在
明确一点:静态是先存在的对象是后存在的
3.被所有对象共享
4.可以直接被类名多调用
实例变量和类变量的区别
1.存放位置
类变量随着类的加载存在于方法区中,实例变量随着对象的对象的建立存在于堆内存里
2.生命周期
类变量生命周期最长,随着&类&的加载而加载,随着类的消失而消失
实例变量随着&对象&的消失而消失
静态的使用注意事项:
1.静态方法只能访问静态成员(包括成员变量和成员方法)
非静态方法可以访问静态也可以访问非静态
2.静态方法中不可以定义this,super关键字
因为静态优先于对象存在,所以静态方法中不可以出现this,super关键字
3.主函数是静态的。
静态的利弊
利:对对象的共享数据进行单独空间的存储,节省空间,没有必要没一个对象中都存储一份
可以直接被类名所调用
弊:生命周期过长,访问出现局限性(只能访问静态)Java 中,为什么在静态方法中可以调用的方法、可以使用的成员变量必须是静态的? - 知乎有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。48被浏览<strong class="NumberBoard-itemValue" title="2分享邀请回答234 条评论分享收藏感谢收起111 条评论分享收藏感谢收起Java的类方法,静态方法 | 基于实例代码分步讲解 一站式学习Java | how2j.cn
类方法: 又叫做静态方法
对象方法: 又叫实例方法,非静态方法
访问一个对象方法,必须建立在有一个对象的前提的基础上
访问类方法,不需要对象的存在,直接就访问
本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器
如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)
走神了?退回10秒
类方法: 又叫做静态方法对象方法: 又叫实例方法,非静态方法访问一个对象方法,必须建立在有一个对象的前提的基础上访问类方法,不需要对象的存在,直接就访问
public class Hero {
//实例方法,对象方法,非静态方法
//必须有对象才能够调用
public void die(){
//类方法,静态方法
//通过类就可以直接调用
public static void battleWin(){
System.out.println(&battle win&);
public static void main(String[] args) {
Hero garen =
new Hero();
garen.name = &盖伦&;
//必须有一个对象才能调用
garen.die();
Hero teemo =
new Hero();
teemo.name = &提莫&;
//无需对象,直接通过类调用
Hero.battleWin();
和一样,调用类方法也有两种方式1. 对象.类方法garen.battleWin();;2. 类.类方法Hero.battleWin();;这两种方式都可以调用类方法,但是建议使用第二种 类.类方法 的方式进行,这样更符合语义上的理解。并且在很多时候,并没有实例,比如在前面练习的时候用到的 Math.random()random()就是一个类方法,直接通过类Math进行调用,并没有一个Math的实例存在。
如果在某一个方法里,调用了对象属性,比如
public String getName(){
}name属性是对象属性,只有存在一个具体对象的时候,name才有意义。 如果方法里访问了对象属性,那么这个方法,就必须设计为对象方法如果一个方法,没有调用任何对象属性,那么就可以考虑设计为类方法,比如
public static void printGameDuration(){
System.out.println(&已经玩了10分50秒&);
}printGameDuration 打印当前玩了多长时间了,不和某一个具体的英雄关联起来,所有的英雄都是一样的。 这样的方法,更带有功能性色彩就像取随机数一样,random()是一个功能用途的方法Math.random()
&姿势不对,事倍功半!
在一个类方法中,直接调用一个对象方法,比如在battleWin中调用die()能否直接调用? 为什么?
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器
如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)
走神了?退回10秒
不能调用,因为调用battleWin()的时候,很可能没有任何具体对象,然而die()是一个对象方法,必须建立在有对象的前提下。如果能调用,就矛盾了。 所以编译器会不让通过
把你的代码复制到下面区域。 如果在线比较不好用,请使用客户端比较软件:
代码高亮插件双击即可选中,不过部分同学反应,通过代码高亮插件复制的代码无法在IDEA里正常显示,这里提供TEXTAREA的方式,方便复制,谢谢
根据练习目标尽量自己实现代码效果,期间会碰到疑问,难题,和自己不懂的地方,这些都是必要的过程
完成过程中,碰到无法解决的问题,带着疑问,查看答案,分析答案的解决思路
依然有不明白的地方,点开视频讲解,带着疑问,听视频讲解有问题的部分
理解后,再从头做一遍,把有疑问的地方都捋清楚
最后再总结一遍,总结思路,总结解决办法,以后遇到类似的问题,怎么处理
把这时的想法,思路,研究都记录下来,等全部学完了,再回过头来巩固和理解,学习效果就会很好,知识点掌握得也牢固.
HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。
请至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到
请至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到
答案时间:
请至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到
答案时间:
答案时间:
请至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到
请至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到
答案时间:
请至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到
请至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到
答案时间:
请至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到
答案时间:
答案时间:
请至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到
答案时间:
答案时间:
答案时间:
答案时间:
傀儡宝贝leo
答案时间:
答案时间:
请至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到
iloveyou无望
答案时间:
请至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到
提问之前请
欢庆国际儿童节,全场五折,优惠码:HAPPYCHILD
可用于全站通
有效期5.28-5.30在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
有一个很常见的代码:System.out.println,这是再常见不过的输出语句,但是学了一段时间突然想起去看了下源码,下面是源码:
public final static PrintStream out =
out是在System类下定义的,还没实例化,out仅仅是一个null的变量,甚至都不能称之为静态对象,但是却能调用PrintStream类下的println()方法,这就不太理解了?请问为什么?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
详细解释:中文版英文版基于jdk7
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
亲,首先,当你启动你的测试类,也就是实例化你的测试类时,你所调用的所有静态类都会先实例化了,所以其实当你执行到System.out.println语句时,System这个类里面的方法和属性都是已经被初始化好了的!
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
registerNatives();
}上面这个静态方法的注解说会调用initializeSystemClass方法进行初始化,这个方法里面的 setOut0(newPrintStream(fdOut, props.getProperty("sun.stdout.encoding")));应该对out进行赋值, private static native void setOut0(PrintStream out)是本地方法;
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
一看到final static,第一反应就应该是这丫的是常量,常量必须是要初始化的,然后再找找,果然他是调用本地方法去初始化的;
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
额, 在initializeSystemClass()这个函数里面做的初始化工作, 这个函数是在系统线程初始化后调用的, 也就是说, 所有的静态成员变量(err out in)都是在这函数里面初始化了的, 例如说这个out : FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out); setOut0(newPrintStream(fdOut, props.getProperty("sun.stdout.encoding")));而setOut0()函数是在native层,在native层把初始化的对象和这个out建立起连接
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。

我要回帖

更多关于 ajax调用非静态方法 的文章

 

随机推荐