黑马程序员技术交流社区

标题: 为什么程序有错误,但能运行出结果 [打印本页]

作者: 吃阁子的猫    时间: 2013-8-13 21:31
标题: 为什么程序有错误,但能运行出结果
本帖最后由 吃阁子的猫 于 2013-8-15 14:56 编辑

public class Test3 {

        /**
         * @param args
         */
        public static void main(String[] args) {
                Test03_frame frame = new Test03_frame();
                frame.setVisible(true);

        }

}
class Test03_frame extends Frame{

        /**
         *
         */
        private static final long serialVersionUID = 1L;
        private Button redbutton;
        private Button greenbutton;
        private Button bulebutton;
        Test03_frame(){
                generateUI();
                handEvent();
        }
        private void handEvent() {
                addWindowListener(new WindowAdapter(){
                        public void windowClosing(WindowEvent e) {
                                System.exit(0);
                        }
                });
                MouseListener ms = new MouseAdapter(){
                        public void mouseEntered(MouseEvent e) {
                                Button button = (Button)e.getSource();
                                Color c = button.getBackground();
                                setBackground(c);
                        }
                        public void mouseExited(MouseEvent e) {
                                Button button = (Button)e.getSource();
                                setBackground(c);                        }
                        public void mouseClicked(MouseEvent e) {
                                Button button = (Button)e.getSource();
                                
                        }
                };
        }
        private void generateUI() {
                setTitle("第三个窗口");
                setSize(400,300);
                setLocation(300,200);
                setLayout(new FlowLayout());
                redbutton = new Button("红");
                greenbutton = new Button("绿");
                bulebutton = new Button("蓝");
                add(redbutton);
                add(greenbutton);
                add(bulebutton);
               
                setVisible(true);
        }
}
红色部分报错,但是有结果,为什么呢?
作者: 想进黑马培训    时间: 2013-8-13 21:44
编译不过么?
作者: 想进黑马培训    时间: 2013-8-13 21:48
改成这样 就不爆红了!
package test;

import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Test3 {

        /**
          * @param args
          */
         public static void main(String[] args) {
                 Test03_frame frame = new Test03_frame();
                 frame.setVisible(true);

        }

}
class Test03_frame extends Frame{

        /**
          *
         */
         private static final long serialVersionUID = 1L;
         private Button redbutton;
         private Button greenbutton;
         private Button bulebutton;
         Test03_frame(){
                 generateUI();
                 handEvent();
         }
         private void handEvent() {
                 addWindowListener(new WindowAdapter(){
                         public void windowClosing(WindowEvent e) {
                                 System.exit(0);
                         }
                 });
                 MouseListener ms = new MouseAdapter(){
                         private Color c;
                                                public void mouseEntered(MouseEvent e) {
                                 Button button = (Button)e.getSource();
                                 Color c = button.getBackground();
                                 setBackground(c);
                         }
                         public void mouseExited(MouseEvent e) {
                                 Button button = (Button)e.getSource();
                                 setBackground(c);                        }
                         public void mouseClicked(MouseEvent e) {
                                 Button button = (Button)e.getSource();
                                 
                        }
                 };
         }
         private void generateUI() {
                 setTitle("第三个窗口");
                 setSize(400,300);
                 setLocation(300,200);
                 setLayout(new FlowLayout());
                 redbutton = new Button("红");
                 greenbutton = new Button("绿");
                 bulebutton = new Button("蓝");
                 add(redbutton);
                 add(greenbutton);
                 add(bulebutton);
                 
                setVisible(true);
         }
}
作者: 柳小龙    时间: 2013-8-13 22:27
追问????-------------试了果然是,有语法错误,eclipse也检查出了错误,为什么程序正常运行了???  
作者: ⑷嚸V恱    时间: 2013-8-14 08:33
看了一下代码,运行出来的结果是 generateUI()方法提供的信息。
主函数 运行到
   Test03_frame(){
                 generateUI();
                 handEvent();
         }
的时候 generateUI()方法是可以正常运行的,错误的地方是在handEvent() 方法中 setBackground(c)里面的c 没有被定义,方法handEvent()里面的信息是不会被正确的输出的。
说个例子, 开发一个程序,不会因为一个地方出现错误,是整个程序就挂掉。出现错误的地方所要输出的信息不会被输入。
下面有个小例子,也可以输入信息aa
  1. public class Test2 {
  2.         public static void main(String[] args) {
  3.                 new Test2().a();
  4.         }
  5.         public void a(){
  6.                 System.out.println("aa");
  7.                 new Test2().b();
  8.         }
  9.         public void b(){
  10.                 System.out.println("bb");
  11.                 int c=c;//错误的
  12.         }
  13. }
复制代码

作者: 吃阁子的猫    时间: 2013-8-14 18:27
想进黑马培训 发表于 2013-8-13 21:44
编译不过么?

对,没编译通过
作者: 吃阁子的猫    时间: 2013-8-14 18:44
⑷嚸V恱 发表于 2013-8-14 08:33
看了一下代码,运行出来的结果是 generateUI()方法提供的信息。
主函数 运行到
   Test03_frame(){

Exception in thread "main" aa
java.lang.Error: Unresolved compilation problem:
        The local variable c may not have been initialized

        at cn.itcast.Test7.b(Test7.java:27)
        at cn.itcast.Test7.a(Test7.java:19)
        at cn.itcast.Test7.main(Test7.java:11)
你的代码运行出来的是这样,这不是说程序有不可解决的错误吗?

作者: 吃阁子的猫    时间: 2013-8-14 18:46
想进黑马培训 发表于 2013-8-13 21:48
改成这样 就不爆红了!
package test;

恩恩,我也知道要把c定义成成员变量,但是还有个问题,成员变量的类类型跟引用与内部类中类类型引用重名了,这样是可以的吗?
作者: ⑷嚸V恱    时间: 2013-8-14 20:43
吃阁子的猫 发表于 2013-8-14 18:44
Exception in thread "main" aa
java.lang.Error: Unresolved compilation problem:
        The local variabl ...

我这是给你举的例子,用意是即使b() 方法中int c=c; 定义是错的 方法a() 也是可以正常运行的 打印 aa
你的程序setBackground(c); 里面 的 c对象是调不到的 。因为你的  Color c = button.getBackground();
定义在方法mouseEntered() 中。想程序正常 在 mouseExited() 方法中在定义一遍Color c = button.getBackground(); 就ok 了。我之前给你解释的是程序有错误,为什么还有结果输入。
作者: 小五555    时间: 2013-8-15 14:53
红色的部分,Eclipse给出的注释是“c cannot be resolved to a variable”,意思是文件没有自动生成,在AndroidManifest.xml中加入一句代码:
<Activity android:name="@string/name1><Activity>
其中name1为你当前java的名称
你试试改过之后是不是就没有报错了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2