一、方法
1、定义:可以看成是构成程序的一个比较小的模块,每个模块都有自己的功能。
2、好处:1.可以减少代码的耦合度
2.避免代码的重复
3、方法的声明
修饰符 返回值类型 方法名 (参数列表){//方法头部
//方法体,由一条或多条语句组成,通常由一组实现特定功能的代码组成
}
***实例1***
public static int max(int num1,int num2){
int result;
if(num1>num2)
result=num1;
else
result=num2;
return result;
}
4、修饰符
***它是可选的,可有可无,目的是为了告知编译器如何调用该方法***
如:public,private,protected等,以及final和static等修饰符。
public:公有的方法,在任何地方都可以调用。
static:说明方法是静态的方法,它既能被静态的方法调用,也可以被非静态的方法调用。
*****范围修饰********
可以修饰类(class),修饰方法,修饰成员变量
类只可以修饰为public,默认不写就是public
public (公共的):谁(什么类)都可以调用
private (私有的):只能当前这个类当中的代码可以调用。
protected (保护的):只能在同一个包下面可以相互调用。
实例1:
public static int max(int num1,int num2)
5、返回值类型
****可选的,可以有返回值,也可以没有返回值,给出返回值的数据类型。没有返回值,给出void****
实例1:
public static int max(int num1,int num2)
6、方法名
必须遵守标识符的命名规则:习惯上与变量名一样,并且也应该做到见名知意;如果名字由多个单词组成,则从第二个单词开始首字母大写。
实例1:
public static int max(int num1,int num2)
7、参数列表
可以为空或多个参数,当有多个参数时,中间用逗号隔开;每个参数给出数据类型和名字。又称为形式参数列表。
参数列表指出调用方法需要传递的参数的类型以及个数。
实例1:
public static int max(int num1,int num2){
int result;
if(num1>num2)
result=num1;
else
result=num2;
return result;
}
8、return的作用:一是用来返回方法的结果,二是用来结束的一个方法。
实例1:
public static int max(int num1,int num2){
int result;
if(num1>num2)
result=num1;
else
result=num2;
return result;
9、********************注意*******************
方法不可以嵌套,在一个方法内部,不允许再定义方法。
二、方法调用
1、方法的名字(实际参数列表);
2、实参和形参保持三个一致:个数,顺序,类型。
实例1:
public static int max(int num1,int num2){
int result;
if(num1>num2)
result=num1;
else
result=num2;
return result;
实例1的调用:
int num=max(5,10);
或者: int x=10,y=2;
int n=max(x,y);
3、参数传值:值传递、地址传递。
值传递:实参是常量,直接将常量值传递给形参变量,实参是变量,将实参变量的值传递给形参变量;
实参(argument):
全称为"实际参数"是在调用时传递给函数的参数. 实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。
形参(parameter):
全称为"形式参数" 由于它不是实际存在变量,所以又称虚拟变量。是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数.在调用函数时,实参将赋值给形参。因而,必须注意实参的个数,类型应与形参一一对应,并且实参必须要有确定的值。
实例2:
static void swap(int x,int y){
int temp;
temp=x;
x=y;
y=temp;
}
main方法中的调用:int a=3,b=5;
swap(x,y);
system.out.println("a="+a+",b="+b);
4、地址传递
实参的地址传递给相应的形参,形式参数与实际参数使用相同的内存地址单元,通过调用被调方法可以改变实参的值。
实例3:
public static void swap(int[] a){
int temp;
temp=a[0];
a[0]=a[1];
a[1]=temp;
}
main方法中的调用:
int[] a={1,2,3,4,5};
swap(a);
System.out.println("a[0]="+a[0]+",a[1]="+a[1]);
三、方法重载
1、定义:java允许在一个类中,多个方法拥有相同的名字,但是名字相同时,必须有不同的参数。
实例4:int max(int n1,int n2){
return n1>n2?n1:n2;
}
double max(double n1,double n2){
return n1>n2?n1:n2;
}
int max(int n1,int n2,int n3){
if(n1>n2&&n1>n3)
return n1;
if(n2>n1&&n2>n3)
return n2;
if(n3>n1&&n3>n1)
return n3;
}
实例4的调用:max(5,10);
max(3,10,5);
实例5:
double min(int n1,double n2){
return n1<n2?n1:n2;
}
double min(double n1,int n2){
return n1<n2?n1:n2;
实例5的调用:int x=5,y=8;
min(x,y);
四、局部变量作用域
1、变量的作用域:指可以使用此变量的简单名称来引用它的程序区域。变量声明在程序的位置决定了变量的作用域。
2、变量的类型:局部变量,成员变量,异常处理参数
局部变量:方法声明部分的形式参数、方法内部定义的变量、以及循环部分定义的变量。(在方法头部或方法的一块代码中声明,它的作用域为它所在的代码块)。
成员变量:是一个类的成员,它在一个类的内部,但是在任何方法或构造器之外声明。成员变量的作用域是整个类。
异常处理参数:被传递给异常2处理代码,它的作用域是异常处理部分,也就是catch语句后面的{之间的代码块。
**********在一个确定的域中,变量名应该是唯一的。通常一个域用花括号[}来划定。************
实例2:
static void swap(int x,int y){
int temp;
temp=x;
x=y;
y=temp;
}
main方法中的调用:int a=3,b=5;
swap(x,y);
system.out.println("a="+a+",b="+b);
********************解析如下********************
方法头部定义了两个形式参数x和y,它们的作用范围是整个方法体,当调用该方法时,首先创建变量x和y,也就是在内存中为x和y分配空间(这与a和b的空间是不一样的),接着
会将a的值传给x,将b的值传给y,开始执行的方法内部的代码,将x和y的值进行交换,方法结束后,变量x和y就会被销毁,因此,对a和b的值并不产生任何影响,那么这个方法并
不能实现将a和b的值进行交换。
五、构造函数
1、构造函数与普通函数的区别
在实例化中去调用,普通函数是直接通过类或者通过对象去调用。
2、构造函数跟普通函数的差别。
2.1.构造函数的名称只能跟类名相同。
2.2.只能在实例化的时候调用(就是只能跟在关键字new 的后面使用)。
2.3构造函数没有返回值。
Dog dog = new Dog("小黑");
3、类与构造函数的关系
调用构造函数就会产生一个该类的实例化对象。
4、自定义的构造函数
默认的构造函数
class 类名{
private int id;
private String name;
public 类名(){
}
}
自定义的构造函数
class 类名{
private int id;
private String name;
public 类名(int id,String name){
this.id=id;
this.name=name;
}
}
5、this关键字
在那个对象使用,this就是代表那个对象