黑马程序员技术交流社区

标题: 构造函数问题,请看看 [打印本页]

作者: 回忆初中时候    时间: 2014-1-5 01:38
标题: 构造函数问题,请看看
public class tong
{
        private String author;
        private String title;
        private int piece;
        public tong(String author,String title,int piece)
        {
                System.out.println("书名:"+this.author);
                System.out.println("作者:"+this.title);     //构造函数里可以有这些语句的存在吗?
                System.out.println("价格:"+this.piece);
        }
        public static void main(String[] args)
        {
                tong t1=new tong("林","JAVA人门",50);
                t1.tong();    //这里出现了错误
        }
}
请指教。。。谢谢
作者: DOOR    时间: 2014-1-5 02:41
本帖最后由 DOOR 于 2014-1-5 02:42 编辑
  1. public class Tong//1类名首字母要大写
  2. {
  3.         private String author;
  4.         private String title;
  5.         private int piece;
  6.         public Tong(String author,String title,int piece)//构造函数名和类名要一模一样
  7.         {
  8.                 System.out.println("书名:"+this.author);
  9.                 System.out.println("作者:"+this.title);     //可以语法上没有问题,继续往下面学,这些问题自然就懂了
  10.                 System.out.println("价格:"+this.piece);
  11.         }
  12.         public static void main(String[] args)
  13.         {
  14.                 Tong t1=new Tong("林","JAVA人门",50);
  15.                 //t1.tong();    //这句话不需要写,构造函数自动加载
  16.         }
  17. }
复制代码

作者: 净坛使者    时间: 2014-1-5 06:43
class tong
{
        private String author;
        private String title;
        private int piece;
        public tong(String author,String title,int piece)
        {
                this.author=author;
                this.title=title;     //构造函数里可以有这些语句的存在吗?
            this. piece=piece;
        }
        public void show (){
                System.out.println(author+title+piece);
        }
      
               
}
class Dmeo {
        public static void main(String[] args)  {
               

         tong t1=new tong("林","JAVA人门",50);
       t1.show();    //这里出现了错误
      
        }
}
作者: 郭高伟    时间: 2014-1-5 08:02
class tong
{
        private String author;
        private String title;
        private int piece;
        public tong(String author,String title,int piece)
        {
                this.author=author;
                this.title=title;     //构造函数里可以有这些语句的存在吗?  这句话可以存在
            this. piece=piece;
        }
        public void show (){
                System.out.println(author+title+piece);
        }
      
               
}
class Dmeo {
        public static void main(String[] args)  {
               

         tong t1=new tong("林","JAVA人门",50);
       t1.show();    //这里出现了错误    这里没有错误,你的执行函数类名是Dmeo 不是Demo 。
      
        }
}//你的文件名最好与你的执行类名相同。javac(编译) 后面执行的是你的文件名
//java(执行)后面是你的执行类名。
作者: 小悠久    时间: 2014-1-5 08:56
public class tong
{
         private String author;
         private String title;
         private int piece;
         public tong(String author,String title,int piece)
         {
                 System.out.println("书名:"+this.author);
                 System.out.println("作者:"+this.title);     //构造函数里可以有这些语句的存在吗?
                 System.out.println("价格:"+this.piece);
         }
         public static void main(String[] args)
         {
                 tong t1=new tong("林","JAVA人门",50);
                 t1.tong();    //这里出现了错误
         }
}

错误在System.out.println("书名:"+this.author);
                 System.out.println("作者:"+this.title);     //构造函数里可以有这些语句的存在吗?
                 System.out.println("价格:"+this.piece);
this代表当前类,也就是tong这个类,author,title和piece只是在类中声明了!并无初始化!在构造函数中也没有赋值,所以调用的时候当然会出错!
解决办法有两种:
第一:可以把this去掉
第二:可以在构造函数用传入的值来初始化this.author = author; ....
作者: ztwztw    时间: 2014-1-5 10:01
第一类名要大写。第二初始化的时候没有赋值。第三函数一被调用构造函数就被读取了,不能再调用。
作者: 周水林    时间: 2014-1-5 10:08
  1. package com.itheima;
  2. public class tong
  3. {
  4.         private String author;
  5.         private String title;
  6.         private int piece;
  7.         public tong(String author,String title,int piece)
  8.         {
  9.                 System.out.println("书名:"+this.author);
  10.                 System.out.println("作者:"+this.title);     //构造函数里可以有这些语句的存在吗?
  11.                 System.out.println("价格:"+this.piece);
  12.         }
  13.         public static void main(String[] args)
  14.         {
  15.                 tong t1=new tong("林","JAVA人门",50);
  16.                /* t1.tong();    //这里出现了错误
  17. */        }
  18. }
复制代码
楼主,你类名的首字母一定要大写,构造函数是可以存在system.out.println();语句的,这个和在不在构造函数里面没有任何的关系,t1.tong();出现错误的原因很简单,构造函数是创建对象的时候使用的,不是创建对象以后才会被调用,这个你一定要好好的看下毕姥爷的视频,会给你带来好多收获的,加油
作者: 曹春洋    时间: 2014-1-5 10:58
public class tong
{
         private String author;
         private String title;
         private int piece;
         public tong(String author,String title,int piece)
         {
                 System.out.println("书名:"+this.author);
                 System.out.println("作者:"+this.title);     //构造函数里可以有这些语句的存在吗?
                System.out.println("价格:"+this.piece);
         }
         public static void main(String[] args)
         {
                 tong t1=new tong("林","JAVA人门",50);
                 t1.tong();    //这里出现了错误
        }
}

这里的错误很明显是,你在创建对象时已经使用了带参数的构造函数,就不能通过类对象来调用了,还有一点小知识点:当你添加了带参数的构造函数是,系统不会自动添加无参数的构造函数,所以一般写程序是都需要手动添加上去
作者: 张俊飞    时间: 2014-1-5 15:18
你的值传递到构造方法,但你的类的成员变量没有接收到你传递的值,你没有把值传递给成员变量
构造方法里面还应有这样的语句
this.author=author;
this.title=title;  
this. piece=piece;
构造方法,是特殊的方法,拥有普通方法的属性,当然可以定义你写的那些输出语句
作者: 回忆初中时候    时间: 2014-1-5 17:35
周水林 发表于 2014-1-5 10:08
楼主,你类名的首字母一定要大写,构造函数是可以存在system.out.println();语句的,这个和在不在构造函数 ...

:)谢谢 请问为什么不能再调用它呢?:)
作者: 回忆初中时候    时间: 2014-1-5 17:39
小悠久 发表于 2014-1-5 08:56
public class tong
{
         private String author;

谢谢。
我把this去掉后,在t1.tong();这里还是有错误。请问 是为什么?
作者: 周水林    时间: 2014-1-5 17:40
回忆初中时候 发表于 2014-1-5 17:35
谢谢 请问为什么不能再调用它呢?

t1本身就是实例化了的对象,实例化对象就是通过构造函数来执行的,那么你想一想,一个已经实例化了的对象还可以去调用这个构造函数么,你只能调用这个对象的其他方法
作者: 回忆初中时候    时间: 2014-1-5 17:42
周水林 发表于 2014-1-5 17:40
t1本身就是实例化了的对象,实例化对象就是通过构造函数来执行的,那么你想一想,一个已经实例化了的对象 ...

:)谢谢 懂了

作者: 周水林    时间: 2014-1-5 17:43
回忆初中时候 发表于 2014-1-5 17:42
谢谢 懂了

不客气,好好看基础视频吧
作者: 汪洋大海    时间: 2014-1-5 17:50
小伙子,你要走的路还有很远啦




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