A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Destiny 中级黑马   /  2012-3-1 10:33  /  2524 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

都说静态方法不能访问非静态方法和变量,那么主方法为何就可以调用其他类的非静态方法呢?这个我想不通。。。。。  能不能把它理解成特殊情况呢?没有Main就不能找到入口了?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

8 个回复

倒序浏览
java程序从main函数开始执行,main函数是java程序入口。
回复 使用道具 举报
main只是虚拟机找程序的入口,抛开这点和其他的函数是一样的,LZ那里看到main调用了其他类的非静态方法呢?
回复 使用道具 举报
话说“程序入口设成静态就不需要JVM在程序运行的时候再new一个新的对象”“不是静态的话,谁来new()这个对象呢? ”我不太明白俄 我对JAVA的理解还不是很深的说
回复 使用道具 举报
  1. 都说静态方法不能访问非静态方法和变量,那么主方法为何就可以调用其他类的非静态方法呢?
复制代码
静态方法不可以直接调用非静态方法,但当非静态方法所在的类实例化后(即new())就可被静态方法调用.主函数调用其他非静态方法也要先实例化,这不是什么特殊情况所有的静态方法都遵循这一原则。楼主可做试验验证一下。

点评

同意  发表于 2012-3-1 21:01

评分

参与人数 2技术分 +2 黑马币 +6 收起 理由
admin + 2
唐兴旺 + 6

查看全部评分

回复 使用道具 举报
什么时候定义静态函数呢?
当功能内部没有访问到非静态数据(对象的特有数据)
那么该功能可以定义成静态函数。
main:不是关键字,可以被JVM识别,JAVA从main函数开始执行。
回复 使用道具 举报
沈样 黑马帝 2012-3-1 19:30:42
7#
本帖最后由 沈样 于 2012-3-1 19:31 编辑

我感觉没什么特殊的:java虚拟机默认main是程序的执行入口,static是因为他跟类没有关系,相当于一个工具方法,至于你说的静态调用静态是因为类创建首先加载static方法,所以类真的变量都没有初化所以不能用,为什么能调用类非静态方法是因为class类  类名 = new class();这句话把类加载进来了,所以他可以调用自身的非静态方法跟变量,如有错误请指出呵呵
回复 使用道具 举报
王杰 黑马帝 2012-3-1 19:30:45
8#
对,静态虽好但只能访问静态,主函数也没有例外。
虽然在定义主函数的时候我们调用了非静态的成员,但是你忽略了一点:
在你调用非静态的成员之前你是不是要先创建一个对象呀?
你如果不创建对象是不能访问静态的成员的!
既然你都创建了对象那么不论是静态还是非静态都能调用了!

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
主要是加载的过程决定了main必须是静态的,在加载之初神已初始化了静态,
而先建立对象后使用方法,所以就非要虚拟机先调用一个静态函数来创建这个对象,
如果把"对象.main();"放在这个后面,那前面那个静态方法何不直接定义成main呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马