public class Cons { public class User{ int id; String name; String pwd; public User(int id){ this.id=id; } public User(int id,String name){ this.id=id; this.name=name;} } public static void main(String[] args){ User u=new User(234);//为什么报错了 } }
有一步报错了,哪里错了
为啥是类里面套了一个类呢
哦哦哦谢谢老师,没注意到
不客气哦,细心点哦
User { ; String ; String ; User(){ System..print(); } User(id){ .=id; } User(id,String name){ .=id; .=name; } main(String[] args) { User u1=User(,); User u2=User(); User u3=User(); System..println(u1.); System..print(u2.); } } 输出: hhh 玩两天 2
请问老师,为什么输出里面有“hhh”,并且还是最先输出?
微信找我给你看一下吧
User { idString nameString pwdUser(){ } User(id){ .id = id} User(idString name){ .id = id.name = name} User(idString nameString pwd){ .id = id.name = name.pwd = pwd} main(String[] args) { User u = User()User u1 = User()User u2 = User()} }
老师,这个代码为什么不能run呀?根本没有run的选项。
代码乱码了
老师 那个无参构造器有什么具体用法
无参构造和有参构造都是在你去new对象的时候使用的,如果一个类里有了有参构造模拟想要使用无参构造,这个无参构造必须定义出来,如果你都使用有参构造,其实也是,比如说你有一个类。User,你有4个属性,你创建有参构造就是把这个4个属性值都放在了有参构造里,如果我有一个需求,这个需求是我只要一个属性值被赋值就可以,不需要4个,那么你可以再去创建一个属性值对应的有参构造,如果另一个需求是需要2个参数的属性值,你就需要再创建一个2个参数的有参构造,这样就太繁琐了,需要属性赋值少的可以通过无参构造new出来的对象调用set方法去赋值的。
好的 明白了
不客气哦
在自动生产构造器时,不需要提前存储一下构造器吗?为什么会自动生成与之前代码相同的构造器?是不是因为下面已经使用了构造器,所以直接生成了对应的构造器?
什么意思呢,老师不太理解你的意思。
原因:构造方法不也是方法的一种嘛,在写构造方法的时候,那个声明的形式参数不就相当于方法的局部变量嘛
上面类中已经声明了id的成员变量
疑问:那再写构造方法时申明一样名称的,一样类型的形式参数(相当于方法的局部变量)为什么不会报错:重复的变量名
对,构造方法是一种特殊的方法,这个在构造方法里不会报错,这个也是一个规定,记住就好
class Point { double x, y; public Point(double _x, double _y) { x = _x; y = _y; } public double getDistance(Point p) { return Math.sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y)); } public static void main(String[ ] args) { Point p1 = new Point(3.0, 4.0); Point origin = new Point(0.0, 0.0); System.out.println(p1.getDistance(origin)); } }
getDistance后面小括号的(Point p)是调用Point方法吗?不是的话为什么不可以用八个基本的数据类型?最后打印的(p1.getDistance(Origin)p1后面用.连接是规定的格式吗?求解答
getDistance后面小括号的(Point p)是调用Point方法吗?
不是point方法,这里是需要一个Point的对象,可以使用八个基本数据类型,这个参数使用对象,是为了使用封装,面向对象刚学习咱们就的去使用和理解呢
p1后面用.连接是规定的格式吗?
对的,规定的格式,使用对象下的方法和属性,就是对象点属性或者方法
老师,这些方法都没有return,为什么方法名前面不需要加void
构造方法比较特殊,必须和类名相同,没有返回值也没有void,这个是规定
老师为什么最后一条代码会报错呀?跟着打的呀?
这里第三个参数需要传入String类型的,但是你传入的是int类型。
老师您好,我有几个问题请教一下
请问:
重载构造方法的意义是否是为了后续对象调用的灵活性,需要几个参数就用几个参数?
如果使用直接默认的构造器不重载,那么类里定义的局部变量就要全部定义赋值,而不能只选择一个或两个?
第一个说的很对,
第二个默认构造器为无参构造器,如果写了有参构造,和第一个是一样的,在调用时,就是看参数,我们在调用时写了几个参数,就会调用有几个参数的构造器。
老师我这为什么会报错呢
框住的删掉,会自动匹配的。
老师例题中讲解的代码如果我想新定义一个打印的方法,用到this.为啥报错啊?
静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了
老师,我想问下 这里的这个方法名用 point不可以吗
不可以的
构造方法的方法名必须和类名相同
关于方法重载的先后问题,有如下代码:
(feetinches) { } (inches) { (feetremainingInches)}
我有三个问题:
如上代码,第一个两个参数的方法,是否一定要写在第二个调用该方法之前?还是说方法之间,即便存在相互调用关系,先后顺序也无所谓?
在之前的代码中,我发现有时候main方法会写在普通方法之前,有时候会写在普通方法之后,但并不影响main方法调用方法。是否在JAVA中,程序遇到方法调用时,即便调用的方法在正在执行的代码之后,程序也会向下寻找方法,而不是说,必须在调用方法的代码前,就必须声明方法?
关于main方法应该放在整个代码最前,还是放在声明的方法后边,是否有一个统一的规范?谢谢
1.第一个两个参数的方法,是否一定要写在第二个调用该方法之前?还是说方法之间,即便存在相互调用关系,先后顺序也无所谓?
答:方法之间即使存在相互调用的关系先后调用不影响的。
2.在之前的代码中,我发现有时候main方法会写在普通方法之前,有时候会写在普通方法之后,但并不影响main方法调用方法。是否在JAVA中,程序遇到方法调用时,即便调用的方法在正在执行的代码之后,程序也会向下寻找方法,而不是说,必须在调用方法的代码前,就必须声明方法?
答;main方法没有规范,只要是在方法之外类中就可以,main方法是最后才去执行的一个操作
老师,为什么输出s2的时候,变成了这样?(见运行效果图)
你这是打印的对象的内存地址,后面会讲的