qq_43739564
_reid
采纳率50%
2019-10-13 19:00 阅读 1.1k

java:Pixel类(Point的子类),表示屏幕上的像素

初学真是难guo
设计一个Pixel类(Point的子类),表示屏幕上的像素,为该类提供一个作为程序执行入口的main方法,测试整个application的正确性。

代码生成.class后,总是显示错误为
Exception in thread "main" java.lang.NullPointerException
at Pixel.main(Point.java:37)

class Point{
int width;
int length;
public void setpoint(int x,int y){
width=x;
length=y;}
public void clear(){
width=0;
length=0;}}

class Color{
int red,green,blue;
void bianse(){}
void bianse(int red,int green,int blue){
this.red=red;
this.green=green;
this.blue=blue;}
public void StringtoString(){
System.out.println("red="+red+"green="+green+";blue="+blue);
}}

class Pixel extends Point{
Color color;
public void clear(){
super.clear();//继承并延展
color=null;}
static public void main(String args[]){ //main
Pixel p1=new Pixel();
p1.clear();
p1.color.bianse(255,0,0);
p1.setpoint(3,3);
System.out.println(p1.width+"*"+p1.length);

p1.color.StringtoString(); }}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • caozhy 从今以后生命中的每一秒都属于我爱的人 2019-10-13 19:18

    class Pixel extends Point{
    Color color;
    public void clear(){
    super.clear();//继承并延展
    color=null;}
    这里的 color 没有初始化,也没有构造函数,也没有被设置

    p1.color.bianse(255,0,0);
    这显然就是null错误了。

    改法有很多,比如
    public void clear(){
    super.clear();//继承并延展
    color=null;}
    修改为
    public void clear(){
    super.clear();//继承并延展
    color=new Color();}

    点赞 4 评论 复制链接分享
  • JonathanYan JonathanYan 2019-10-13 23:53

    java的变量都是初始化为null的,不像c一样会初始化一个对象,所以java定义对象都要写new。你的程序在声明Pixel的私有变量时就可以写new。

    class Pixel extends Point{
        Color color = new Color();
    

    其次你的 color = null 语句很危险,因为后续没有对应的赋值语句,尽管你现在的代码用不到,但最好加上。

    点赞 1 评论 复制链接分享

相关推荐