public class UseClass_1 { /**
 * @param args
 */
class Point{
int x,y;
public Point(int x,int y){
this.x=x;
this.y=y;
}
}
class Circle{
Point center=new Point(0,0);
    double radius=0;
public Circle(int x,int y,double r){
center.x=x;
center.y=y;
radius=r;
}
public double area(){
return Math.PI*radius*radius;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Point p =new Point(7,8);
Circle c=new Circle(p.x,p.y,9);

System.out.println("圆中心点在"+"("+Point.x+","+Point.y+")");
System.out.println("半径为"+Circle.radius);
System.out.println("圆的面积为"+Circle.area());

}
}
这个程序出了什么问题、、、
??

解决方案 »

  1.   

    你有2个问题,内部类不能被new,类名.属性,是要加上static的属性才行
      

  2.   

    内部类就相当于你的属性,加上static才能new
      

  3.   

    除了1楼的问题外,你后面的输出也有问题,不能直接用类来试图访问成员变量,因该是:        System.out.println("圆中心点在" + "(" + c.center.x + "," + c.center.y + ")");
            System.out.println("半径为" + c.radius);
            System.out.println("圆的面积为" + c.area());不过一楼解释的不完全准确,是因为main函数本身是static的,所以它引用的内部类也必须是static的;非static函数,可以直接new非static的内部类。
      

  4.   


    public static void main(String[] args) {
    UseClass_1 uc = new UseClass_1();
    UseClass_1.Point p = uc.new Point(7, 8);
    UseClass_1.Circle c = uc.new Circle(p.x, p.y, 9); System.out.println("圆中心点在" + "(" + p.x + "," + p.y + ")");
    System.out.println("半径为" + c.radius);
    System.out.println("圆的面积为" + c.area()); }
      

  5.   

    /**
    *把这个类放到类外面声明
    */
    class Point{
    int x,y;
    public Point(int x,int y){
    this.x=x;
    this.y=y;
    }
    }
    /**
    *把这个类放到类外面声明
    */
    class Circle{
    Point center=new Point(0,0);
    double radius=0;
    public Circle(int x,int y,double r){
    center.x=x;
    center.y=y;
    radius=r;
    }
    public double area(){
    return Math.PI*radius*radius;
    }
    }
    public class UseClass_1 {/**
    * @param args
    */public static void main(String[] args) {
    // TODO Auto-generated method stub
    Point p =new Point(7,8);
    Circle c=new Circle(p.x,p.y,9);/**
    *如果使用类名.方法(),那么你的方法需要定义成为static,即 public static double area();
    *但是 area()中使用了radius这个属性也需要定义成为 static,因为静态方法不能访问类中非静态属性和方法
    */
    System.out.println("圆中心点在"+"("+p.x+","+p.y+")");
    System.out.println("半径为"+c.radius);
    System.out.println("圆的面积为"+c.area());}
    }
      

  6.   

    public class UseClass_1 { /**
     * @param args
     */
    static class Point{
    static int x,y;
    public Point(int x,int y){
    this.x=x;
    this.y=y;
    }
    }
    static class Circle{
    public static String x;
    public static String y;
    Point center=new Point(0,0);
        static double radius=0;
    public Circle(int x,int y,double r){
    center.x=x;
    center.y=y;
    radius=r;
    }
    public static double area(){
    return Math.PI*radius*radius;
    }
    }
    public static void main(String[] args) {
    // TODO Auto-generated method stub

    Circle c=new Circle(7,8,9);

    System.out.println("圆中心点在"+"("+Point.x+","+Point.y+")");
    System.out.println("半径为"+Circle.radius);
    System.out.println("圆的面积为"+Circle.area());

    }
      

  7.   

     class Point{
    static int x,y;
    public Point(int x,int y){
    this.x=x;
    this.y=y;
    }
    }
     class Circle{


    Point center=new Point(0,0);
        static double radius=0;
    public Circle(int x,int y,double r){
    center.x=x;
    center.y=y;
    radius=r;
    }
    public static double area(){
    return Math.PI*radius*radius;
    }
    }
    public class UseClass_1 { /**
     * @param args
     */ public static void main(String[] args) {
    // TODO Auto-generated method stub
    Point p=new Point(7,8);
    Circle c=new Circle(p.x,p.y,9);

    System.out.println("圆中心点在"+"("+Point.x+","+Point.y+")");
    System.out.println("半径为"+Circle.radius);
    System.out.println("圆的面积为"+Circle.area());

    }
    }
      

  8.   


    public class UseClass_1 {
    class Point{
    int x,y;
    public Point(int x,int y){
    this.x=x;
    this.y=y;
    }
    }
    class Circle{
    Point center=new Point(0,0);
    double radius=0;
    public Circle(int x,int y,double r){
    center.x=x;
    center.y=y;
    radius=r;
    }
    public double area(){
    return Math.PI*radius*radius;
    }
    }

    public void run(){
    Point p =new Point(7,8);
    Circle c=new Circle(p.x,p.y,9);
    System.out.println("圆中心点在"+"("+p.x+","+p.y+")");
    System.out.println("半径为"+c.radius);
    System.out.println("圆的面积为"+ c.area());
    }
    public Point newPoint(){

    return new Point(7,8);
    }
    public Circle newCircle(){
    Point p=newPoint();
    return new Circle(p.x,p.y,9);
    }
    public static void main(String[] args){
    UseClass_1 user = new UseClass_1();
    user.run();
    Point p = user.newPoint();
    Circle c = user.newCircle();
    }
    }我想纠正一下一楼的观点,内部类可以new出来,只是main方法是静态方法,而且类是UseClass_1对象的,所以必须先有UseClass_1的实例,才可以new出来。