求清晰,构造方法中参数与属性之间的区别。
java吧
全部回复
仅看楼主
level 9
bodanli159951 楼主
已知以上代码有错,求神解答!
1.在构造方法中已经,什么叫已经存在name和age属性?找属性怎么找着找着又成了参数?
2.请问一下,在这个图中的构造方法中,到底有没有name和age属性?
3.还是参数和属性区别在哪?
先谢谢大家了!
2013年04月07日 09点04分 1
level 9
bodanli159951 楼主
补上最前面的东西:
2013年04月07日 09点04分 2
level 1
你把概念弄混啦。
这是我编写的你参考下
public class Practice42{
public static void main(String []args){
int m=7;
int n=21;
Alphabet a=new Alphabet(); //用Alphabet创建的对象a,同时输出结果。
System.out.println();
System.out.println();
Number rn=new Number(m,n); //用Number创建的对象rn,计算奇数数列之和。
}
} class Alphabet{
static final int NMB=26; //类变量常量
char[] c=new char[NMB];
Alphabet(){
for(int i=0;i<NMB;i++){
c[i]=(char)('A'+i);
System.out.print(c[i]+" ");
}
} //构造(小)方法
} class Number{
int r;
static int sum=0;
Number(int m,int n){
if(m<n){
r=reckonNumber(m,n);
System.out.println("计算等差为2的奇数从"+m+" 到 "+n+" 的和为:"+r);
}
else{
System.out.println("您的输入有误,请重新输入!!!");
}
}
static int reckonNumber(int a,int b){
for(int i=a;i<=b;i++){
if(i%2!=0){
sum+=i;
}
}
return sum;
}
}
2013年04月07日 09点04分 3
level 1
你要知道对于构造方法不能有返回值,不能用void,不能被对象调用,它是用来创建对象的。
在一个类里面可以有多个构造方法。
例如:
class MyTest{
Mytest(){
}
MyTest(String name){
}
MyTest(String interest,String name){
}
}
仅参考。
2013年04月07日 09点04分 4
我想问的是,类中定义已的属性(如String name),在构造方法中,MyTest(String name){name = name};请问这些name到底是不是全是参数?
2013年04月07日 10点04分
已经搞懂了,谢谢了
2013年04月07日 11点04分
回复 bodanli159951 :MyTest(String name){name1=name};这句中 name是构造方法的的形式参数,而name1则是全局变量(在此类中)。
2013年04月08日 04点04分
level 11
其实如果本类中的属性和构造参数的属性名称相同的话,应该写成这个样子
public Person(String name, int age){
this.name = name; //this.name 的name指的是本类的name属性,这个语句就是将从通过构造函数传递进来的name,age赋值给本类中已经定义的name,age属性
this.age = age;
}
========================================================================
或者你可以写成这样:
private String name1;
private int age1;
public Person(String name, int age){
name1 = name;
age1 = age;
}
不知道回答的是否是你想要的
2013年04月07日 10点04分 5
如果类中已经定义了name,但在MyTest(String name){name = name};请问这些name到底是不是全是参数?
2013年04月07日 10点04分
this关键这个我知道。只是麻烦能看一下二楼,我补上的东西么?我主要是这里被搞糊涂了,谢谢了
2013年04月07日 10点04分
就我理解来言所谓属性指的是描述个体对象的特征,就好比Person有name,age这种属性,所以在MyTest中的前面的name就是属性,后面的可以叫做传进来的“参数”
2013年04月07日 10点04分
回复 bodanli159951 :参数是:用来控制随其变化而变化的其他的量,在这里将name = name;那么后面的name赋值给前面的name,就将前面的name的值改变了,所以后面的name称为参数
2013年04月07日 10点04分
level 14
如果参数和全局的成员变量名字一样,那全局变量用this.出来就好!没必要凿那么深,以后你就慢慢理解了。。
2013年04月07日 10点04分 8
可是我这人就是太较真,求解答! 那问一下MyTest(String name){name = name}中,哪个是局部变量?哪个是成员变量? 谢谢了!
2013年04月07日 10点04分
回复 bodanli159951 :你现在打的这个什么也不是,只有this.name = name了,那么this.name才算全局变量
2013年04月07日 10点04分
回复 妖僧和二 :那么这些name,也就全是成员变量,是么?
2013年04月07日 10点04分
回复 bodanli159951 :[汗]一会给你画个图。。
2013年04月07日 10点04分
level 14
2013年04月07日 10点04分 9
谢谢,了解了
2013年04月07日 11点04分
MyTest(String name){name = name};再请教一下,在构造方法中的这句String name,是不是也算声明了一个name属性?
2013年04月07日 11点04分
不是,那个只是形参
2013年04月07日 16点04分
level 6
楼主主要想问的是为什么出错而已,比如,a=0.a=1.那a=a是0=1呢还是1=0
2013年04月07日 11点04分 10
[88],a=1后,a的堆内存就是1了,0早给换没了。赋值语句和地址引用的变化,应该是有点差别的把。
2013年04月07日 11点04分
回复 bodanli159951 :比喻而已,一个是类变量,一个是局部变量,但他们名字都相同,系统就不知道是谁给谁值了
2013年04月07日 13点04分
回复 咚咚Java :我昨天才搞懂,如果在构造方法中, 局部变量和成员变量名相同 ,则就近原则,全是局部变量。
2013年04月08日 01点04分
回复 咚咚Java : MyTest(String name){name = name}。name全是局部变量,即便在类中定义了 String name
2013年04月08日 01点04分
level 9
bodanli159951 楼主
已经搞懂了,谢谢大家
2013年04月07日 11点04分 11
level 8
问一下,定义构造方法后,怎么用来初始化数据成员,就如楼主那道题目!
2013年04月07日 12点04分 12
你可以调试一下,下一楼的代码,如去掉定义构造方法中的this.setName(n) ;或者主类中per = new Person("张三",30) 的赋值改一下;
2013年04月07日 12点04分
回复 bodanli159951 :谢谢
2013年04月07日 13点04分
level 9
就近原则吧。而且名字一样。JVM就不知道到底那个才是属性,那个才是参数
2013年04月07日 12点04分 13
level 9
bodanli159951 楼主
class Person{
private String name ;
private int age ;
public Person(String n,int a){ // 声明构造方法,为类中的属性初始化
this.setName(n) ;
this.setAge(a) ;
}
public void setName(String n){
name = n ;
}
public void setAge(int a){
if(a>0&&a<150){
age = a ;
}
}
public String getName(){
return name ;
}
public int getAge(){
return age ;
}
public void tell(){
System.out.println("姓名:" + this.getName() + ";年龄:" + this.getAge()) ;
}
};
public class ConsDemo01{
public static void main(String args[]){
System.out.println("声明对象:Person per = null ;") ;
Person per = null ; // 声明对象时并不去调用构造方法
System.out.println("实例化对象:per = new Person() ;") ;
per = new Person("张三",30) ;//实例化对象
per.tell() ;
}
};
2013年04月07日 12点04分 14
level 7
没有那么复杂,就是类和对象的问题。那是要对对象的属性进行初始化,所以要指明是当前对象,所以加上this
2013年04月07日 12点04分 15
level 8
其实这个没什么不好理解的 只要认真的听一下就知道了 就像LZ的:MyTest(String name){name = name} 其实如果编译一下就会知道这是个错的 然后你在加上MyTest(String name){this.name = name} 编译的话 就行了 这样思想想一下 因为this是关键字标示了变量的属性 这样思考下去就知道了
2013年04月08日 02点04分 16
1