24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 1406  |  回复: 8

studyhae

木虫 (正式写手)

[交流] 【求助】final 属性 已有7人参与

定义类:
class aClass{
     public final double x;
     public final double y;

    public double getXY(){
       return x*y;
   }
}

由于属性x,y为final,必须在new类的时候初始化x,y。我的问题是,java编译器在优化的过程中,会将x*y先计算出来吗?就是说getXY()方法,是不是直接返回一个值,而没有进行乘法计算?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

王建发

铜虫 (小有名气)

调试一下不就知道了吗
我发贴,我成长
2楼2010-11-18 22:54:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

王建发

铜虫 (小有名气)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
nono2009(金币+2):鼓励应助 2010-11-19 20:44:13
public class Aclass{
{
  x=10;
  y=10;
}
public final double x;
public final double y;
public double getXY(){
  return x*y;
}
}
可以这样初始化在new的时候就执行了
我发贴,我成长
3楼2010-11-18 23:03:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

linyujack

铜虫 (小有名气)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
余泽成(金币+1):谢谢参与应助! 2010-12-14 09:54:26
应该不会在new的时候直接计算出来的,除非Java编译器的优化规则中,规定了这种情况,碰到final变量的情况,可以直接把getxy()的return替换为数值,但这种规则要实现起来似乎非常的麻烦。
卓越不仅仅是单一的举动,而是一种习惯。
4楼2010-12-13 23:26:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Thornfighter

木虫 (著名写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
微尘、梦想(金币+2): 谢谢回复…… 2011-04-06 15:18:21
class aClass{
     public final double x;
     public final double y;

    public double getXY(){
       return x*y;
   }
}

由于属性x,y为final,必须在new类的时候初始化x,y。我的问题是,java编译器在优化的过程中,会将x*y先计算出来吗?就是说getXY()方法,是不是直接返回一个值,而没有进行乘法计算?
一、类成员变量用final修饰需要在声明的时候就赋值,否则将不能通过编译直接报错。可以这样理解,因为在创建对象的时候,如果没有使用构造方法或静态初始化器为成员变量赋值,那么成员变量将被赋默认值(对int类型来说是0),而又由于有final修饰,所以一旦赋值后就不能修改,那这种成员变量将失去使用价值。
二、x*y不会先计算出来,这个你可以在getXY()方法中嵌入一个变量调试一下就知道了!
class aClass{
     public final double x=10;//使用final修饰成员变量的时候必须赋值
     public final double y=100;
     double test;

    public double getXY(){
        test=x*y;//嵌入test
        return x*y;
   }

    public double getTest() {
        return test;
    }
}

public class Test1 {
    public static void main(String[] args) {
        aClass a=new aClass();
        System.out.println("before getXY() run,test="+a.getTest());
        a.getXY();
        System.out.println("after getXY() run, test="+a.getTest());
    }
}
迷茫
5楼2011-04-05 18:18:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+2): 谢谢参与应助! 2011-04-21 12:10:09
这个对于不同的编译器可能效果不同,但可以肯定的是一定会被优化掉
final表示最后一次赋值,在类型检查的时候x*y就会被代换成指定的值,然后再编译的时候发现常量相乘,肯定会被计算,楼上的解释不能说明问题:
text = 2*3与return 2*3明显就是text = 6与return 6
漩涡的中心有一块空地,空空的。
6楼2011-04-20 18:26:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

kerenbing

铁虫 (初入文坛)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+1): 谢谢参与应助!欢迎常来程序语言版! 2011-12-08 14:05:20
我认为会先计算出x*y的值,因为final变量就相当于一个常量,在编译的时候就已经初始化了,x*y就可以看作是两个常量相乘。。。。。。。
7楼2011-12-06 08:47:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

空指针

铁虫 (初入文坛)


小木虫(金币+0.5):给个红包,谢谢回帖
个人愚见:final常理包括“编译时常量”和“运行时常理”,楼主这个应该属于运行时常量的,开始编译时应该不会直接计算的吧。如果在主函数里应该就能直接替代了。
8楼2012-02-15 14:31:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

niefang007

铁虫 (初入文坛)


小木虫: 金币+0.5, 给个红包,谢谢回帖
楼主只是new一下实例 没用实例去调用方法感觉应该不会计算,明天试试
9楼2014-02-25 21:46:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 studyhae 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 材料调剂 +13 一样YWY 2026-04-05 14/700 2026-04-07 09:51 by piklet
[考研] 338求调剂 +4 我想上岸ii 2026-04-05 4/200 2026-04-06 21:04 by 木子君1218
[考研] 求调剂,一志愿郑州大学材料与化工专硕,英二数二342分,求老师收留 +19 v12abo 2026-04-02 21/1050 2026-04-06 09:29 by 蓝云思雨
[考研] 一志愿 江南大学 085602 化工专硕 338分求调剂 +15 路痴小琪 2026-04-05 15/750 2026-04-06 09:27 by cql1109
[考研] 070300化学学硕311分求调剂 +11 梁富贵险中求 2026-04-04 13/650 2026-04-06 07:24 by houyaoxu
[考研] 0854电子信息319求调剂(接受跨专业调剂) +3 星星不眨眼喽 2026-04-05 3/150 2026-04-05 20:20 by 啵啵啵0119
[考研] 296求调剂 +3 汪!?! 2026-04-05 5/250 2026-04-05 17:38 by 蓝云思雨
[考研] 358求调剂 +7 秋gk 2026-04-04 7/350 2026-04-05 13:29 by huangmoli
[考研] 材料调剂 +9 革微桂 2026-04-04 9/450 2026-04-05 08:27 by 544594351
[考研] 085600调剂 +4 1amJJ 2026-04-02 4/200 2026-04-04 21:53 by hemengdong
[考研] 材料与化工306分找调剂 +23 沧海轻舟e 2026-04-02 27/1350 2026-04-04 21:52 by laoshidan
[考研] 一志愿北京科技大学材料工程085601,求调剂 +17 cdyw 2026-04-02 18/900 2026-04-04 11:14 by w_xuqing
[考研] 农学考研求调剂 +3 dkdkxm 2026-04-01 3/150 2026-04-02 16:04 by wangjagri
[考研] 一志愿北京科技大学085601材料工程英一数二初试总分335求调剂 +8 双马尾痞老板2 2026-04-02 9/450 2026-04-02 14:45 by 5896
[考研] 283求调剂 +3 jiouuu 2026-04-02 4/200 2026-04-02 14:08 by 哒哒哒呱呱呱
[考研] 08工科求调剂290分 +5 1314捧花 2026-04-02 8/400 2026-04-02 13:16 by 乔哒哒哒
[考研] 266求调剂 +4 学员97LZgn 2026-04-02 4/200 2026-04-02 13:03 by yulian1987
[考研] 一志愿346上海大学生物学 +3 上海大学346调剂 2026-04-01 3/150 2026-04-02 08:36 by w虫虫123
[考研] 318求调剂 +8 七忆77 2026-04-01 8/400 2026-04-01 10:37 by Jaylen.
[考研] 340求调剂 +4 希望如此i 2026-03-31 4/200 2026-03-31 16:40 by 690616278
信息提示
请填处理意见