how2j.cn


工具版本兼容问题
类方法: 又叫做静态方法

对象方法: 又叫实例方法,非静态方法

访问一个对象方法,必须建立在有一个对象的前提的基础上
访问类方法,不需要对象的存在,直接就访问


本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频



6分38秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器



步骤 1 : 类方法   
步骤 2 : 调用类方法   
步骤 3 : 什么时候设计对象方法,什么时候设计类方法   
步骤 4 : 练习-类方法   
步骤 5 : 答案-类方法   

类方法: 又叫做静态方法

对象方法: 又叫实例方法,非静态方法

访问一个对象方法,必须建立在有一个对象的前提的基础上
访问类方法,不需要对象的存在,直接就访问
package charactor; public class Hero { public String name; protected float hp; //实例方法,对象方法,非静态方法 //必须有对象才能够调用 public void die(){ hp = 0; } //类方法,静态方法 //通过类就可以直接调用 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的实例存在。
步骤 3 :

什么时候设计对象方法,什么时候设计类方法

edit
如果在某一个方法里,调用了对象属性,比如

public String getName(){
return name;
}

name属性是对象属性,只有存在一个具体对象的时候,name才有意义。 如果方法里访问了对象属性,那么这个方法,就必须设计为对象方法

如果一个方法,没有调用任何对象属性,那么就可以考虑设计为类方法,比如

public static void printGameDuration(){
System.out.println("已经玩了10分50秒");
}

printGameDuration 打印当前玩了多长时间了,不和某一个具体的英雄关联起来,所有的英雄都是一样的。 这样的方法,更带有功能性色彩
就像取随机数一样,random()是一个功能用途的方法

Math.random()
步骤 4 :

练习-类方法

edit  姿势不对,事倍功半! 点击查看做练习的正确姿势
在一个类方法中,直接调用一个对象方法,
比如在battleWin中调用die()
能否直接调用? 为什么?
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费3个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 基础总计0个答案 (总共需要0积分)
查看本答案会花费3个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 基础总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

3分24秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器


不能调用,因为调用battleWin()的时候,很可能没有任何具体对象,然而die()是一个对象方法,必须建立在有对象的前提下。

如果能调用,就矛盾了。 所以编译器会不让通过


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2024-02-08 可以
wind_lz




请看代码
public class MyClass {
    public static void battleWin() {
        MyClass obj = new MyClass();
        obj.die();
    }

    public void die() {
        System.out.println("Object method called");
    }
}

							





回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2023-08-03 0.0
tkc030526

在一个类方法中,是可以直接调用一个对象方法的。这是因为类方法可以通过类名来调用,而对象方法是绑定在具体的对象上的。当类方法调用对象方法时,需要提供一个对象作为参数,以便在对象方法内部使用。因此,在类方法中直接调用对象方法时,需要先创建一个对象,并将其作为参数传递给对象方法。




1 个答案

木宇
答案时间:2024-04-28
打卡



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2021-05-31 /为什么/this.method1(); 会报错 //为什么method1(); 会报错 // 能解释一下this 吗?
2021-03-20 为什么我通过传参的方式调用了呢?
2020-10-29 不能


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 26 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 JAVA 基础-类和对象-类方法 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 578362961
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图