作者phreat (待价而孤)
看板AndroidDev
标题[问题] private 差异性
时间Thu Dec 17 11:49:36 2015
抱歉小的又来发新手问题了
自行测试了几段程式码
看到有人会这样写
Button button = (Button) findViewById(R.id.button);
也看到也有其它人程式写法为
http://www.codedata.com.tw/mobile/android-tutorial-the-2nd-class-3-interaction/
7-3第三段程式
"TextView show_app_name = (TextView) findViewById(R.id.show_app_name);"
於是就把自己的改成这样
TextView textView = (TextView) findViewById(R.id.textView);
EditText editText = (EditText) findViewById(R.id.editText);
发现都会错误
正常运作程式码
http://ideone.com/DcAQgX
正常运作程式码
http://ideone.com/NmOVb0 (改写第4 15 16 行
无法运作
http://ideone.com/kXthiF (改写第3 12 13 行
错误在第23行 textView123
还请大大们开示>< 刚入门跌跌撞撞的
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.34.104.209
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1450324185.A.17B.html
1F:推 Jasonzheng: 这是当然 跟private没关系 12/17 12:09
2F:→ Jasonzheng: TextView textView=xxxxxxx 12/17 12:10
3F:→ Jasonzheng: 前面大写的TextView是类别名称 12/17 12:10
4F:→ Jasonzheng: 後面小写是自行取的物件名称 12/17 12:11
5F:推 Jasonzheng: 你在onCreate 的finview 是为了把元件指全域变数 12/17 12:13
6F:→ Jasonzheng: 不用在onCreate再实例一次 12/17 12:14
7F:→ Jasonzheng: 把onCreate中的类别名称(开头大写的) 删掉即可 12/17 12:16
感谢Jasonzheng提点 虽然还是不懂@@
尝试将无法运作的这段
http://ideone.com/kXthiF
不管是拿掉
onCreate(Bundle savedInstanceState) => onCreate(savedInstanceState)
或是将
super.onCreate(savedInstanceState); 整段拿掉
都会错误
8F:推 kiwatami: 我猜你是报 NullPointerException? 12/17 15:30
9F:→ kiwatami: 因为你的 onClickListener 是一个新的 Instance 12/17 15:30
10F:→ kiwatami: 所以他会取用 class 的成员而不是你的区域变数 12/17 15:31
11F:→ kiwatami: 如果你把成员拿掉就要把区域变数宣告成final 12/17 15:31
12F:→ kiwatami: 而当初IDE没有阻止尚未初始化的变数使用 12/17 15:32
13F:→ kiwatami: 也是因为那个是新的 Instance 而无从判断 12/17 15:32
感谢kiwatami 我尝试加入 final 可正常运作
只是不懂网站上的7-3段教学 不用加入final 我的却要加
感觉自己很多观念还没进来 是不是要拿java来K一下>////<
14F:推 kiwatami: 如果我没看错的话 7-3 在 onClickListener 里面 12/17 16:54
15F:→ kiwatami: 好像没用到区域变数 12/17 16:54
16F:→ kiwatami: 这个部分的确是 java 的观念喔 不过写久了也会知道 12/17 16:55
17F:→ kiwatami: 建议是遇到问题再查 才不会看一堆又忘记 12/17 16:56
18F:→ kiwatami: 当然能先看是最好 有个印象也比较好下关键字 12/17 16:56
谢谢 我会再去了解区域变数 与 全域变数的差异>////<
再次感谢
※ 编辑: phreat (220.135.173.229), 12/18/2015 10:04:37
19F:→ Jasonzheng: 我是说要把"B"utton拿掉啦@@ button留着 12/18 14:04
20F:→ Jasonzheng: 全域与区域的概念 12/18 14:04
21F:→ Santez: 要把textView123宣告放置onCreate外面 12/20 00:30
22F:→ Santez: 还有另一种是直接:((TextView)find..()).setText(..) 12/20 00:31
23F:→ Jasonzheng: 不用放外面 除非有用到区域方法如onClick 12/20 10:15
感谢 虽然还在努力搞懂区域 跟 全域 只能多练习不同的写法 谢谢><
有尝试把textview123放到onCreate 上面 虽然可以成功的执行
不过在手机上会出现 意外程式终止 或许是因为练习下面已经改了很多
後面跟前面有冲突到吧 >///<
※ 编辑: phreat (220.135.173.229), 12/21/2015 10:37:32