java基础之面向对象常见问题整理.docx
- 文档编号:8507303
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:32
- 大小:112.67KB
java基础之面向对象常见问题整理.docx
《java基础之面向对象常见问题整理.docx》由会员分享,可在线阅读,更多相关《java基础之面向对象常见问题整理.docx(32页珍藏版)》请在冰豆网上搜索。
java基础之面向对象常见问题整理
java基础之面向对象常见问题整理
(1)
什么是方法?
*A:
为什么要有方法
*提高代码的复用性(可以将一个功能反复调用,不需要重复写很多次代码)
*B:
什么是方法
*完成特定功能的代码块。
*C:
方法的格式
*
修饰符返回值类型方法名(参数类型参数名1,参数类型参数名2...){
方法体语句;
return返回值;
}
*D:
方法的格式说明
*修饰符:
目前就用publicstatic。
后面我们再详细的讲解其他的修饰符。
*返回值类型:
就是功能结果的数据类型。
*方法名:
符合命名规则即可。
方便我们的调用。
*参数:
(根据实际需求,可以有参数,也可以无参数)
*实际参数:
就是实际参与运算的。
*形式参数;就是方法定义上的,用于接收实际参数的。
*参数类型:
就是参数的数据类型
*参数名:
就是变量名
*方法体语句:
就是完成功能的代码。
*return:
结束方法的。
*返回值:
就是功能的结果,由return带给调用者。
classDemo1_Method{
publicstaticvoidmain(String[]args){
}
/*
*C:
方法的格式
*
修饰符返回值类型方法名(参数类型参数名1,参数类型参数名2...){
方法体语句;
return返回值;
}
*D:
方法的格式说明
*修饰符:
目前就用publicstatic。
后面我们再详细的讲解其他的修饰符。
*返回值类型:
就是功能结果的数据类型。
*方法名:
符合命名规则即可。
方便我们的调用。
*参数:
*实际参数:
就是实际参与运算的。
*形式参数;就是方法定义上的,用于接收实际参数的。
*参数类型:
就是参数的数据类型
*参数名:
就是变量名
*方法体语句:
就是完成功能的代码。
*return:
结束方法的。
*返回值:
就是功能的结果,由return带给调用者。
*/
}
如何写一个方法?
/*
*A:
如何写一个方法
*1,明确返回值类型(要返回什么数据?
这个功能到底要不要返回值?
)
*2,明确参数列表(需要你传入什么数据?
根据数据类型来写参数)
*B:
案例演示
*需求:
求两个数据之和的案例
*C:
方法调用图解
*/
classDemo2_Sum{
publicstaticvoidmain(String[]args){
/*inta=10;
intb=20;
intsum=a+b;
System.out.println(sum);
intc=30;
intd=40;
intsum2=c+d;
System.out.println(sum2);*/
intsum=add(10,20);
System.out.println(sum);
//add(30,40);//有返回值方法的单独调用,没有意义
System.out.println(add(30,40));//这样调用是可以,but如果需要用这个结果不推荐这样调用
//盘子=炒菜(地沟油,苏丹红,镉大米,烂白菜);
}
/*
求两个整数的和
1,整数的和结果应该还是整数
2,有两个未知内容参与运算
如何写方法
1,明确返回值类型
2,明确参数列表
*修饰符:
目前就用publicstatic。
后面我们再详细的讲解其他的修饰符。
*返回值类型:
就是功能结果的数据类型。
*方法名:
符合命名规则即可。
方便我们的调用。
*参数:
*实际参数:
就是实际参与运算的。
*形式参数;就是方法定义上的,用于接收实际参数的。
*参数类型:
就是参数的数据类型
*参数名:
就是变量名
*方法体语句:
就是完成功能的代码。
*return:
结束方法的。
*返回值:
就是功能的结果,由return带给调用者。
*/
publicstaticintadd(inta,intb){//inta=10,intb=20
intsum=a+b;
returnsum;//如果有返回值必须用return语句带回
}
/*
盘子炒菜(油,调料,米,菜){
炒菜的动作
return一盘菜;
}
*/
}
方法怎么调用的?
*A:
方法调用(有具体返回值)
*a:
单独调用,一般来说没有意义,所以不推荐。
*b:
输出调用,但是不够好。
因为我们可能需要针对结果进行进一步的操作。
*c:
赋值调用,推荐方案。
*B:
案例演示
*a:
方法不调用不执行
*b:
方法与方法是平级关系,不能嵌套定义
*c:
方法定义的时候参数之间用逗号隔开
*d:
方法调用的时候不用在传递数据类型
*e:
如果方法有明确的返回值,一定要有return带回一个值
/*
*A:
案例演示
*需求:
键盘录入两个数据,返回两个数中的较大值
*B:
案例演示
*需求:
键盘录入两个数据,比较两个数是否相等
*/
importjava.util.Scanner;
classTest1_Method{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);//创建键盘录入对象
System.out.println("请输入第一个整数:
");
intx=sc.nextInt();//将键盘录入的整数存储在x中
System.out.println("请输入第二个整数:
");
inty=sc.nextInt();//将键盘录入的整数存储在y中
//intmax=getMax(x,y);
//System.out.println(max);
booleanb=isEquals(x,y);
System.out.println(b);
}
/*
返回连个整数的较大值
1,明确返回值类型int
2,明确参数列表inta,intb
*/
publicstaticintgetMax(inta,intb){
returna>b?
a:
b;
}
/*
判断两个整数是否相等
1,明确返回值类型boolean
2,明确参数列表inta,intb
*/
publicstaticbooleanisEquals(inta,intb){//isEquals是否相等
returna==b;
}
}
return关键字有什么用?
作用一:
写在方法里面,直接终止方法,方法不再往下执行代码.
作用二:
如果用在返回值类型的方法上,如果方法返回类型为void,可以加可以不加,通常都不加,系统会默认给上.
核心作用:
一般用于有返回值的方法上,用于返回跟方法返回类型的值.
publicstaticbooleanisEquals(inta,intb){//isEquals是否相等
returna==b;
}
例如这个方法:
方法返回值类型是布尔类型,我们return语句跟的就是布尔类型的结果.
方法的形式参数是基本数据类型跟引用数据类型有何不同?
/*
基本数据类型的值传递,不改变原值,因为调用后就会弹栈,局部变量随之消失
引用数据类型的值传递,改变原值,因为即使方法弹栈,但是堆内存数组对象还在,可以通过地址继续访问
Java中到底是传值还是传址
1,既是传值,也是传地址,基本数据类型传递的值,引用数据类型传递的地址
2,java中只有传值,因为地址值也是值(出去面试都说这种,支持者是高司令(java之父))
*/
classTest3_Array{
publicstaticvoidmain(String[]args){
/*inta=10;
intb=20;
System.out.println("a:
"+a+",b:
"+b);//a=10,b=20
change(a,b);
System.out.println("a:
"+a+",b:
"+b);//?
*/
int[]arr={1,2,3,4,5};
change(arr);
System.out.println(arr[1]);
}
publicstaticvoidchange(inta,intb){//a=10,b=20
System.out.println("a:
"+a+",b:
"+b);//a=10,b=20
a=b;//a=20
b=a+b;//b=40
System.out.println("a:
"+a+",b:
"+b);//a=20,b=40
}
publicstaticvoidchange(int[]arr){//1,4,3,8,5
for(intx=0;x if(arr[x]%2==0){ arr[x]*=2; } } } } 方法的形式参数是类名的时候如何调用? *A: 方法的参数是类名publicvoidprint(Students){}//print(newStudent()); *如果你看到了一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。 classDemo1_Student{ publicstaticvoidmain(String[]args){ print(10); Students=newStudent();//创建对象,并将对象的地址值赋值给s print(s); } publicstaticvoidprint(intx){//基本数据类型当作形式参数 System.out.println(x); } publicstaticvoidprint(Studentstu){//引用数据类型当作形式参数 stu.name="张三"; stu.age=23; stu.speak(); } } /* *A: 方法的参数是类名publicvoidprint(Students){}//print(newStudent()); *如果你看到了一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。 */ classStudent{ Stringname;//姓名 intage;//年龄 publicvoidspeak(){ System.out.println(name+"..."+age); } } •如果你看到了一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。 什么是方法重载? /* 重载: 方法名相同,参数列表不同,与返回值类型无关 重载的分类 1,参数个数不同 2,参数类型不同 顺序不同 */ classDemo4_Overload{//overload重载 publicstaticvoidmain(String[]args){ doublesum1=add(10,20.1); System.out.println(sum1); intsum2=add(10,20,30); System.out.println(sum2); doublesum3=add(12.3,13); System.out.println(sum3); } /* 求两个整数的和 1,返回值类型int 2,参数列表inta,intb */ publicstaticdoubleadd(inta,doubleb){ returna+b; } /* 求三个整数的和 1,返回值类型int 2,参数列表inta,intb,intc */ publicstaticintadd(inta,intb,intc){ returna+b+c; } /* 求两个小数的和 1,返回值类型double 2,参数列表doublea,doubleb */ publicstaticdoubleadd(doublea,intb){ returna+b; } } 怎么写一个方法重载? (案例演示) /* *A: 案例演示 *需求: 比较两个数据是否相等。 *参数类型分别为两个int类型,两个double类型,并在main方法中进行测试 */ classTest3_Overload{ publicstaticvoidmain(String[]args){ booleanb1=isEquals(10,10); System.out.println(b1); booleanb2=isEquals(10.5,10.5); System.out.println(b2); } /* 比较两个数据是否相等 1,返回值类型boolean 2,参数列表inta,intb */ publicstaticbooleanisEquals(inta,intb){ returna==b; } /* 比较两个数据是否相等 1,返回值类型boolean 2,参数列表doublea,doubleb */ publicstaticbooleanisEquals(doublea,doubleb){ returna==b; } } 什么是面向对象,什么是面向过程,区别是什么? 面向对象是基于面向过程的。 在开发过程中,要完成特定的功能就去找相应的对象,如果找不到就创建相应的对象,使用对象,维护完善对象。 面向对象和面向过程的区别 面向过程强调的是功能行为; 面向对象将功能封装成对象,强调的是具备功能的对象,面向对象有三大特征: 封装,继承,多态 面向对象的特点是什么,从哪几个角度去说面向对象? * a: 是一种更符合我们思想习惯的思想 * b: 可以将复杂的事情简单化 * c: 将我们从执行者变成了指挥者 * 角色发生了转换 什么是类? 什么是成员变量? 什么是成员方法? *A: 我们学习编程是为了什么 *为了把我们日常生活中实物用学习语言描述出来,在java里面,我们学习用类去描述一个实体 *B: 我们如何描述现实世界事物 *属性就是该事物的描述信息(事物身上的名词) *行为就是该事物能够做什么(事物身上的动词) *C: Java中最基本的单位是类,Java中用class描述事物也是如此 *成员变量就是事物的属性 *成员方法就是事物的行为 *D: 定义类其实就是定义类的成员(成员变量和成员方法) *a: 成员变量和以前定义变量是一样的,只不过位置发生了改变。 在类中,方法外。 *b: 成员方法和以前定义方法是一样的,只不过把static去掉,后面在详细讲解static的作用。 *E: 类和对象的概念 *a: 类: 是一组相关的属性和行为的集合 什么是对象? 创建对象有什么用? *b: 对象: 是该类事物的具体体现(类是抽象的,而对象是实际的,如人类是一种类,你是一个具体的人) *c: 举例: *类学生类 *对象具体的某个学生就是一个对象 作用: 简单理解,创建对象出来一般用于调用类里面的成员方法,使用类里面的功能方法. 成员变量和局部变量有什么区别? *A: 在类中的位置不同 *成员变量: 在类中方法外 *局部变量: 在方法定义中或者方法声明上 *B: 在内存中的位置不同 *成员变量: 在堆内存(成员变量属于对象,对象进堆内存) *局部变量: 在栈内存(局部变量属于方法,方法进栈内存) *C: 生命周期不同 *成员变量: 随着对象的创建而存在,随着对象的消失而消失 *局部变量: 随着方法的调用而存在,随着方法的调用完毕而消失 *D: 初始化值不同 *成员变量: 有默认初始化值 *局部变量: 没有默认初始化值,必须定义,赋值,然后才能使用。 *注意事项: *局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。 *基本数据类型变量包括哪些: byte,short,int,long,float,double,boolean,char *引用数据类型变量包括哪些: 数组,类,接口,枚举 classDemo2_Person{ publicstaticvoidmain(String[]args){ Personp=newPerson(); p.speak(); } } /* *A: 在类中的位置不同 *成员变量: 在类中方法外 *局部变量: 在方法定义中或者方法声明上 *B: 在内存中的位置不同 *成员变量: 在堆内存(成员变量属于对象,对象进堆内存) *局部变量: 在栈内存(局部变量属于方法,方法进栈内存) *C: 生命周期不同 *成员变量: 随着对象的创建而存在,随着对象的消失而消失 *局部变量: 随着方法的调用而存在,随着方法的调用完毕而消失 *D: 初始化值不同 *成员变量: 有默认初始化值 *局部变量: 没有默认初始化值,必须定义,赋值,然后才能使用。 E: 使用方式不一样 *成员变量: 对象名.成员变量来调用 *局部变量: 直接调用。 *注意事项: *局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。 *基本数据类型变量包括哪些: byte,short,int,long,float,double,boolean,char *引用数据类型变量包括哪些: 数组,类,接口,枚举 */ classPerson{ Stringname;//成员变量 intnum; publicvoidspeak(){ intnum=10;//x和num都是局部变量 System.out.println(name); System.out.println(num); } } 什么是栈内存,什么是堆内存? 什么是方法区? /* *A: 栈(掌握) *存储局部变量,在main方法里面运行的方法需要进栈内存压栈 (特点: 先进后出) 局部变量: 定义在方法声明上(方法的参数里的变量)和方法中的变量 *B: 堆(掌握) *存储new出来的数组或对象 *C: 方法区 *类(.class字节码文件)加载和静态成员变量和静态成员方法加载的地方 *D: 本地方法区 *和系统相关 *E: 寄存器 *给CPU使用 */ classDemo3_Array{ publicstaticvoidmain(String[]args){ int[]arr=newint[3];//动态初始化,创建3块连续的空间 System.out.println(arr); arr[0]=10; arr[1]=20; System.out.println(arr[0]); System.out.println(arr[1]); } } 什么是构造方法? *A: 构造方法概述和作用 *作用: 创建对象(new对象)时候调用,给对象的数据(属性)进行初始化 *B: 构造方法格式特点 *a: 方法名与类名相同(大小也要与类名一致) *b: 没有返回值类型,连void都没有 *c: 没有具体的返回值return; classDemo1_Constructor{//Constructor构造 publicstaticvoidmain(String[]args){ Personp=newPerson();//在一创建对象的时候,系统就帮我调用了构造方法 //p.Person();//构造方法不能用对象调用 p.show(); Personp2=newPerson();//再次创建对象 p2.show(); } } /* *A: 构造方法概述和作用 *给对象的数据(属性)进行初始化 *B: 构造方法格式特点 *a: 方法名与类名相同(大小也要与类名一致) *b: 没有返回值类型,连void都没有 *c: 没有具体的返回值return; */ classPerson{ privateStringname; privateintage; //构造方法 publicPerson(){ //System.out.println("HelloWorld! "); //return;//构造方法也是有return语句的,格式是return; name="张三"; age=23; } publicvoidshow(){ System.out.println(name+"..."+age); } } 为什么自己写了有参构造方法还要再写个无参构造方法? 1,如果自己不写构造方法,系统会默认帮我们添加一个无参的构造方法(可以使用XJAD反编译工具看到) 2,如果自己写了有参构造或无参构造,系统将不会再帮我们提供无参构造方法. 3,开发中如果写了有参构造,必须养成习惯自己写无参构造,因为底层在调用我们代码时候,会调用无参构造,后面知识点会涉及到. 什么是构造方法重载? * A: 案例演示 * 构造方法的重载(就是构造方法名称一样,参数个数或者类型不同,或者参数顺序不同)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 基础 面向 对象 常见问题 整理