形式参数类名的问题.docx
- 文档编号:17352487
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:18
- 大小:86.54KB
形式参数类名的问题.docx
《形式参数类名的问题.docx》由会员分享,可在线阅读,更多相关《形式参数类名的问题.docx(18页珍藏版)》请在冰点文库上搜索。
形式参数类名的问题
1形式参数的问题
/*
形式参数的问题:
基本类型:
形式参数的改变不影响实际参数
引用类型:
形式参数的改变直接影响实际参数
*/
//形式参数是基本类型
classDemo{
publicintsum(inta,intb){
returna+b;
}
}
//形式参数是引用类型
classStudent{
publicvoidshow(){
System.out.println("我爱学习");
}
}
classStudentDemo{
//如果你看到了一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。
publicvoidmethod(Students){//调用的时候,把main方法中的s的地址传递到了这里Students=newStudent();
s.show();
}
}
classArgsTest{
publicstaticvoidmain(String[]args){
//形式参数是基本类型的调用
Demod=newDemo();
intresult=d.sum(10,20);
System.out.println("result:
"+result);
System.out.println("--------------");
//形式参数是引用类型的调用
//需求:
我要调用StudentDemo类中的method()方法
StudentDemosd=newStudentDemo();
//创建学生对象
Students=newStudent();
sd.method(s);//把s的地址给到了这里
}
}
2匿名对象
/*
匿名对象:
就是没有名字的对象。
匿名对象的应用场景:
A:
调用方法,仅仅只调用一次的时候。
注意:
调用多次的时候,不适合。
那么,这种匿名调用有什么好处吗?
有,匿名对象调用完毕就是垃圾。
可以被垃圾回收器回收。
B:
匿名对象可以作为实际参数传递
*/
classStudent{
publicvoidshow(){
System.out.println("我爱学习");
}
}
classStudentDemo{
publicvoidmethod(Students){
s.show();
}
}
classNoNameDemo{
publicstaticvoidmain(String[]args){
//带名字的调用
Students=newStudent();
s.show();
s.show();
System.out.println("--------------");
//匿名对象
//newStudent();
//匿名对象调用方法
newStudent().show();
newStudent().show();//这里其实是重新创建了一个新的对象
System.out.println("--------------");
//匿名对象作为实际参数传递
StudentDemosd=newStudentDemo();
//Studentss=newStudent();
//sd.method(ss);//这里的s是一个实际参数
//匿名对象
sd.method(newStudent());
//在来一个
newStudentDemo().method(newStudent());
}
}
3封装类private
/*
private:
是一个权限修饰符
可以修饰成员变量和成员方法
被其修饰的成员只能在本类中被访问
*/
classDemo{
//intnum=10;
//用private修饰
privateintnum=10;
publicvoidshow(){
System.out.println(num);
}
privatevoidmethod(){
System.out.println("method");
}
publicvoidfunction(){
method();
}
}
classPrivateDemo{
publicstaticvoidmain(String[]args){
Demod=newDemo();
//不能方法私有的成员变量
//System.out.println(d.num);
d.show();
//不能访问私有的成员方法
//d.method();
d.function();
}
}
4定义学生类
/*
定义一个学生类:
成员变量:
name,age
成员方法:
show()方法
我们在使用这个案例的过程中,发现了一个问题:
通过对象去给成员变量赋值,可以赋值一些非法的数据。
这是不合理的。
应该是这个样子的:
在赋值之前,先对数据进行判断。
判断到底在哪里做比较合适呢?
StudentDemo类是一个测试类,测试类一般只创建对象,调用方法。
所以,这个判断应该定义在Student类中。
而我们在成员变量的位置可不可以进行数据判断呢?
是不可以的,因为做数据校验,必须要依靠一些逻辑语句。
逻辑语句是应该定义在方法中的,所以,我们最终决定在Student类中提供一个方法
来对数据进行校验。
按照我们前面的分析,我们给出了一个方法进行校验。
但是呢,它偏偏不调用方法来赋值,还是直接赋值了,
这样我们的方法就没有起到作用。
我就应该要求你必须使用我的方法,而不能直接调用成员变量赋值。
怎么去强制要求不能直接使用成员变量呢?
针对这种情况,Java就提供了一个关键字private
private:
私有的。
可以修饰成员变量和成员方法。
注意:
被private修饰的成员只能在本类中访问。
其实我讲到现在讲解的是一个封装的思想。
封装:
是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
*/
classStudent{
//姓名
Stringname;
//年龄
privateintage;
//写一个方法对数据进行校验
/*
返回值类型:
void
参数列表:
inta
*/
publicvoidsetAge(inta){
if(a<0||age>120){
System.out.println("你给的年龄有问题");
}else{
age=a;
}
}
//show()方法,显示所有成员变量值
publicvoidshow(){
System.out.println("姓名:
"+name);
System.out.println("年龄:
"+age);
}
}
classStudentDemo{
publicstaticvoidmain(String[]args){
//创建学生对象
Students=newStudent();
s.show();
System.out.println("--------------");
//给成员变量赋值
s.name="林青霞";
//s.age=27;
s.setAge(27);
s.show();
System.out.println("--------------");
//给age赋值
//s.age=-27;//这个数据是不合理的
//通过方法给值
s.setAge(-27);
s.show();
System.out.println("--------------");
}
}
5学生测试类
/*
封装和private的应用:
A:
把成员变量用private修饰
B:
提高对应的getXxx()和setXxx()方法
*/
//定义学生类
classStudent{
//姓名
privateStringname;
//年龄
privateintage;
//姓名获取值
publicStringgetName(){
returnname;
}
//姓名设置值
publicvoidsetName(Stringn){
name=n;
}
//年龄获取值
publicintgetAge(){
returnage;
}
//年龄赋值
publicvoidsetAge(inta){
age=a;
}
}
//测试类
classStudentTest{
publicstaticvoidmain(String[]args){
//创建学生对象
Students=newStudent();
//使用成员变量
//错误:
被私有修饰了,外界不能直接访问了
//System.out.println(s.name+"---"+s.age);
System.out.println(s.getName()+"---"+s.getAge());
//给成员变量赋值
//s.name="林青霞";
//s.age=27;
//通过方法给赋值
s.setName("林青霞");
s.setAge(27);
System.out.println(s.getName()+"---"+s.getAge());
}
}
6定义手机类
/*
作业:
请把手机类写成一个标准类,然后创建对象测试功能。
手机类:
成员变量:
品牌:
Stringbrand;
价格:
intprice;
颜色:
Stringcolor;
成员方法:
针对每一个成员变量给出对应的getXxx()/setXxx()方法。
最后定义测试:
创建一个对象,先通过getXxx()方法输出成员变量的值。
这一次的结果是:
null---0---null
然后通过setXxx()方法给成员变量赋值。
再次输出结果。
这一次的结果是:
三星---2999---土豪金
*/
classPhone{
//品牌
privateStringbrand;
//价格
privateintprice;
//颜色
privateStringcolor;
//getXxx()和setXxx()方法
publicStringgetBrand(){
returnbrand;
}
publicvoidsetBrand(Stringbrand){
this.brand=brand;
}
publicintgetPrice(){
returnprice;
}
publicvoidsetPrice(intprice){
this.price=price;
}
publicStringgetColor(){
returncolor;
}
publicvoidsetColor(Stringcolor){
this.color=color;
}
}
classPhoneTest{
publicstaticvoidmain(String[]args){
//创建手机对象
Phonep=newPhone();
//直接输出默认值
System.out.println(p.getBrand()+"---"+p.getPrice()+"---"+p.getColor());
//给成员变量赋值
p.setBrand("三星");
p.setPrice(2999);
p.setColor("土豪金");
//再次输出
System.out.println(p.getBrand()+"---"+p.getPrice()+"---"+p.getColor());
}
}
7this类定义学生类
/*
标准的代码改进版
this:
哪个对象调用那个方法,this就代表那个对象
*/
classStudent{
privateStringname;
privateintage;
publicStringgetName(){
returnname;//这里其实是隐含了this
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
}
classStudentTest2{
publicstaticvoidmain(String[]args){
//创建一个对象
Students1=newStudent();
s1.setName("林青霞");
s1.setAge(27);
System.out.println(s1.getName()+"---"+s1.getAge());
//创建第二个对象
Students2=newStudent();
s2.setName("刘意");
s2.setAge(30);
System.out.println(s2.getName()+"---"+s2.getAge());
}
}
8测试类
/*
我们曾经曰:
起名字要做到见名知意。
this:
是当前类的对象引用。
简单的记,它就代表当前类的一个对象。
注意:
谁调用这个方法,在该方法内部的this就代表谁。
this的场景:
解决局部变量隐藏成员变量
*/
//定义学生类
classStudent{
//姓名
privateStringname;
//年龄
privateintage;
//姓名获取值
publicStringgetName(){
returnname;
}
//姓名设置值
publicvoidsetName(Stringname){//name="林青霞";
//name=name;//变量的使用规则:
就近原则
//这里是类名,目前还没有说过类似的用法,所以这个是有问题的
//这里的调用只能通过对象名
//这个对象如果存在,它应该代表的是Student的一个对象。
//那么,谁能够代表当前类的对象呢?
java就提供了一个关键字this
//Student.name=name;
this.name=name;
}
//年龄获取值
publicintgetAge(){
returnage;
}
//年龄赋值
publicvoidsetAge(intage){
this.age=age;
}
}
//测试类
classStudentTest{
publicstaticvoidmain(String[]args){
//创建学生对象
Students=newStudent();
//给成员变量赋值
s.setName("林青霞");
s.setAge(27);
//获取数据
System.out.println(s.getName()+"---"+s.getAge());
}
}
This关键词内存图解
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 形式 参数 问题