1.老师,为什么我创建的这个老师出错,实在有点找不到原因?

1.老师,为什么我创建的这个老师出错,实在有点找不到原因?

package com.imooc.people;

public class Heart {
	
}
package com.imooc.people;

//外部类
public class Personal {
	public int age;
	// new Heart().temp=12;

	public Heart getHeart() {
		return new Heart();
	}

	public void eat() {
		System.out.println("人会吃东西 ");
	}

	/*
	 * 成员内部类 1.内部类在外部使用时,无法直接实例化,需要借助外部类实例化才能访问; 2.内部类的访问修饰符,可以任意,但访问权限会受到影响;
	 * 3.内部类的可以直接访问外部类的成员,如果出项同名属性,优先访问内部类中定义的; 4.可以使用外部类中.this。成员的方式访问外部类当中同名的信息;
	 * 5.外部类访问内部类不能直接访问,需要通过new 内部类()。对象名; 6.内部类编译后.class文件命名:外部类$内部类。class;
	 */
	/*
	 * public class Heart { int age = 13; int temp = 223;
	 * 
	 * public String beat() { return Personal.this.age + "岁的心脏在跳动"; //
	 * 访问personal类中的成员; } }
	 */
	/*
	 * 静态内部类 1.静态内部类中,只能直接访问外部类中的静态成员(方法和属性),如果需要调用非静态成员,可以通过对象实例;
	 * 2.静态内部类对象实例时,可与不依赖于外部类对象;
	 * 3.可以通过外部类.内部类。静态成员的方式,访问内部类中的成员;
	 * 4.当内部类与外部类当中的的属性同名时,默认直接调用内部类中的成员;如果需要访问外部类中的静态属性,则可以通过外部类。属性的方式访问;;如果需要访问外部类中的非静态属性,则可以通过new 外部类()。属性的方式访问;
	 */
	public static class Heart {
	public static int age = 13;// 问题2:为何此处不注释会报错?有何解决办法?
		// int temp = 23;

		new Personal().eat();

		public static void say() {
			System.out.println("你好");
		}

		public String beat() {
			return new Personal().age + "岁的心脏在跳动";
			// 访问personal类中的成员;
		}
	}
}
package com.imooc.test;

import com.imooc.people.Personal;
import com.imooc.people.Personal.Heart;

public class PeopleTest {

	public static void main(String[] args) {
		
		/*Personal lili = new Personal();
		lili.age = 12;
		// 获取内部类的实例对象,方案一:new 外部类()。new 内部类();
		Personal.Heart myHeart = new Personal().new Heart();
		System.out.println(myHeart.beat());
		// 获取内部类的实例对象,方案二:外部类对象。new 内部类();
		 myHeart=lili.new Heart();
		 System.out.println(myHeart.beat());
		// 获取内部类的实例对象,方案三:外部类对象。获取方法;
		 myHeart=lili.getHeart();
		 System.out.println(myHeart.beat());*/
		Personal.Heart muHeart= new Personal.Heart();
		System.out.println(muHeart.beat());//问题4:报错
		Personal.Heart.say();
		
	}
}


正在回答

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

3回答

1、下图选中的代码,不能写到类的定义里面,要写到方法里面,你可以写到say()方法中,类的这个位置只能写变量和方法的定义。另外,注意Peraonal这个类名写错了,应该是Personal。再有,从你新粘贴的代码中看到,Heart()这个类中并没有temp属性,所以此处报错。

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

2、下面的代码中,return语句后面不能再有语句 ,编译器会认为这段代码执行不到,所以会报错。可以去掉,或者根据需求写到合适的位置。

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

祝学习愉快!

  • Ironxi_work 提问者 #1
    非常感谢!
    2018-02-01 19:16:01
提问者 Ironxi_work 2018-01-31 18:49:36
代码如下:
请老师指点
package com.imooc.people;

public class Heart {
	
}
package com.imooc.people;

//外部类
public class Personal {
	public int age;
	int temp;

	public Heart getHeart() {
		return new Heart();
	}

	public void eat() {
		System.out.println("人会吃东西 ");
	}

	public static class Heart {
		// 1.此处报错;错误信息Syntax error on token "{", { expected after this tokenSyntax error
		// on token "{", { expected after this token
		new Peraonal().age=13;new Heart().temp=12;

		public  void say() {
			/*
			 * 2.此处报错
			 * Multiple markers at this line
	- Syntax error on token "{", ; expected
	- Syntax error, insert "VariableDeclarators" to complete 
	 LocalVariableDeclaration
			 */
			System.out.println("你好");
		}

		public String beat() {
			return new Personal().age + "岁的心脏在跳动";
			// 访问personal类中的成员;
			new Personal().eat();
		}
	}
}


一叶知秋519 2018-01-30 11:17:04

你好,出错的原因是:静态内部类的new Personal().eat();写到了定义成员变量的位置,你把这句代码注释掉,或者写到方法内就可以了。new Personal().eat();是调用方法的代码语句,不是定义语句,不可以写到成员变量的位置的。祝学习愉快~

  • 提问者 Ironxi_work #1
    老师您说的我已经写到了beat方法内,然后还有一个问题是在45行报错,这个地方应该没什么问题呀?
    2018-01-30 18:58:33
  • 提问者 Ironxi_work #2
    是因为和第十行重名的缘故吗?
    2018-01-30 18:59:47
  • 提问者 Ironxi_work #3
    改为new Peraonal().age =13;也出错了
    2018-01-30 19:02:20
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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