老师为什么我这样做会报错,跟视频不一样??

老师为什么我这样做会报错,跟视频不一样??

http://img1.sycdn.imooc.com//climg/5b6edfb60001469708330744.jpg

http://img1.sycdn.imooc.com//climg/5b6edfb6000116fb08540766.jpg

http://img1.sycdn.imooc.com//climg/5b6edfb60001a94008710723.jpg

视频中虽然在animal这个对象前面加上final,但也可以照样重新赋值,为什么我不行呢?而且我在animal实例化之后再实例化一次的时候,视频里面报错是在第二次实例化那一行报错的,为啥我反而是在第一次实例化那一行报错??报错都不一样呢?

package com.mason.animal;
/*
 * final class: 该类没有子类,不允许被继承 public   final  class | final  public  class   两种方式都可以
 * final 方法:该方法不允许被子类重写,但是可以正常被子类继承使用
 * final 方法内局部变量:只要在具体被使用之前进行赋值即可,一旦赋值不允许被修改
 *          类中的成员属性:赋值过程:1、定义直接初始化 2、构造方法  3、构造代码块
 * 
 */
public class Animal {
 /*
  * 私有private:只允许在本类中进行访问
  * 公有public: 允许在任意位置访问
  * 受保护protected:允许在当前类、同包子类/非子类、跨包子类调用,跨包非子类不允许
  * 默认:允许在当前类、同包子类/非子类调用;跨包子类/非子类不允许调用
  */
     private String name="妮妮";//昵称
     protected int month=2;//月份
     private String species;//品种
     public final  int temp=12;
       
     //父类的构造不允许被继承,不允许被重写
       public Animal() {
        System.out.println("我是父类的无参构造方法");
     }
       
    public Animal(String name,int month) {
     this.name=name;
     this.month=month;
      System.out.println("我是父类的带参构造方法");
 }
       
     private static int st1=22;
     private static int st2=23;
     
  final Animal animal=new Animal("凡凡",1);
//    animal=new Animal();
   
     
     static {
      System.out.println("我是父类的静态代码块");
     }
    {
      System.out.println("我是父类的构造代码块");
     }
     
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getMonth() {
  return month;
 }
 public void setMonth(int month) {
  this.month = month;
 }
 public String getSpecies() {
  return species;
 }
 public void setSpecies(String species) {
  this.species = species;
 }
     
     //吃东西
 public void eat() {
  System.out.println(this.getName()+"在吃东西");
 }
 public void eat(String name) {
//  final int temp=10;//方法内的局部变量
  System.out.println(name+"在吃东西");
 }
 
 
 
 public boolean equals(Object obj) {
  if(obj==null)  return false;
  Animal temp=(Animal)obj;
  if(this.getName().equals(temp.getName())&&(this.getMonth()==temp.getMonth()))
   return true;
  else
   return false;
 }
 
 public boolean equals(Animal obj) {
  if(obj==null)  return false;
  if(this.getName().equals(obj.getName())&&(this.getMonth()==obj.getMonth()))
   return true;
  else
   return false;
 }
 
 public String toString() {
  return "昵称:"+this.getName()+";年龄:"+this.getMonth();
 }
 
 
 
 
 
 
}

我把我的代码发出来,请老师帮我解答一下,谢谢老师!

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

我运行你的代码是没有问题的,请问同学用的是JDK的哪个版本呢?

老师使用的是JDK1.8

祝学习愉快!

  • MasonM 提问者 #1
    老师你好,我也是用JDK1.8,我后来尝试了一下,发现我把 final Animal animal=new Animal("凡凡",1); // animal=new Animal(); 放在方法里面编译就能和视频里面的效果一样了,请问是否要放在方法里面去进行实例化的?
    2018-08-12 13:18:28
  • MasonM 提问者 #2
    还有我想请一下,我的eclipse无法调试怎么办,之前都可以的,后来就不行了,一调试一按F5就Source not found,该怎么办呀?
    2018-08-12 13:19:48
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师