黑马程序员技术交流社区

标题: 关于局部变量类型是类名的问题 [打印本页]

作者: 张昊镭    时间: 2012-3-12 14:39
标题: 关于局部变量类型是类名的问题
在第五天的this关键字应用里面有段代码
class Person
{
    private int age;
    Person(int age)
    {
        this.age=age;
    }
    public boolean compare(Person p)
    {
        return this.age==p.age;
    }
}
class PersonDemo
{
    public static void main(String[] args)
    {
        Person p1=new Person(20);
        Person p2=new Person(25);
        System.out.println(p1.compare(p2));
    }
}
compare里面的p参数类型是Person,请描述下这个Person类型是一个什么样的类型,我只想到这个类型里面有一个int类的age.还有个问题,成员变量的类型可以是类名吗,看了百度还是不太理解自定义的类型.
作者: 蒙武辉    时间: 2012-3-12 14:56
描述下这个Person类型是一个什么样的类型:Person是类类型
成员变量的类型可以是类名吗:可以是的。
要知道除了8种基本数据类型,还有类类型。
作者: 赵孟恩    时间: 2012-3-12 15:00
Person类是你自定义的,你说了算!里面的age是Person类的属性,属性age是int类型, 你说的成员变量类型可以是Person类型 new Person();也就是创建Person对象
作者: 杨毅    时间: 2012-3-12 15:00
描述的话就是 有一个Person类,这个类有一个int型属性age, 对外提供一个比较年龄的方法,只有一个构造方法,创建对象时需要传递int型参数来初始化

成员变量类型可以是该类类型,典型的就是单例嘛
作者: adison    时间: 2012-3-12 15:02
Person是一个类类型,因为你自己定义了一个Person类,数据类型包括基本数据类型和引用数据类型,类属于引用数据类型,成员变量的类型可以是类名,譬如你定义一个类,
class Person {
    int age;
    String name;
}
String 就是一个类名,你可以在API文档找到它
甚至你可以这样
class Person {
    int age;
    String name;
    Person manr;
    Person woman;
}

作者: 罗闯    时间: 2012-3-12 15:11
先解释一下你这个程序的含义:p1.compare(p2);这里的compare方法返回值是boolean类型的,return this.age==p.age;比较的是private 类型的age,实际上也就是哪个私有的成员变量,和传入的参数(形式参数)两个引用的age值是否相等,这里要注意实际上this就是指的private int age

实际上    Person(int age)
    {
        this.age=age;
    }
这个类是person类的构造方法,带有参数的,而compare并不是该类的构造方法(构造方法的原则之一就是方法名必须和类名相同)。

然后Person类型是一个什么样的类型?它就是一个Person类型,你的描述似乎有些含糊不知道是不是这个问题。看我下面的定义:

class person
{
   private person p; //p就是person类型的成员变量。
}

希望能帮到你

作者: 潘许超    时间: 2012-3-12 15:24
描述下这个Person类型是类类型
成员变量的类型可以是类名。
java中的名称规范:
包名:小写
类名和接口名:由多个单词组成首字母大写
变量和函数名:第一个单词首字母小写,第二个单词开始首字母大写
常量名:所有字母大写,多个单词用下划线连接。
常量和变量:
java中的常量:表示不能改变的数值
整数常量(所有整数),小数常量(所有小数),布尔常量(true和false),字符常量(只能存放一个字符),字符串常量(可以存在好多字符的常量,可以为空值),null常量(只有一个字为null)。除了8种基本数据类型,还有类类型。数组类型等
作者: 黄或俊    时间: 2012-3-12 15:34
Q:请描述下这个Person类型是一个什么样的类型,
w:数据类型分为:基本数据类型、引用数据类型(数组、类、接口),所以Person是类类型

Q:成员变量的类型可以是类名吗
W:可以是类名,比如:main(){ Person p;}成员变量p就是Persin类名,但是成员变量的类型用类名的话,使用必须初始化
作者: 张昊镭    时间: 2012-3-12 18:32
adison 发表于 2012-3-12 15:02
Person是一个类类型,因为你自己定义了一个Person类,数据类型包括基本数据类型和引用数据类型,类属于引用 ...

明白了 难怪String要大写首字母   
作者: 张昊镭    时间: 2012-3-12 18:51
罗闯 发表于 2012-3-12 15:11
先解释一下你这个程序的含义:p1.compare(p2);这里的compare方法返回值是boolean类型的,return this.age= ...

明白了,感谢点拨,我的描述确实是含糊的,呵呵,因为我没搞类类型是什么样的类型,当时在想,数字1是整型吧,我定义了一个方法,参数类型是int,那么我调用的时候就传整数类型的数进去,但是这里的compare方法的参数类型是Person,类类型,这是一个什么样的类型,我该传什么样的数进去呢,当时就这个问题没想通.   我还请教个问题,对象p2是由Person实例化创建的,那么p2就是Person类型的,所以我可以向compare方法里面传p2,我这样理解对吗?




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