Java语言方法
一、对象和类
1.什么是对象和类
Java语言中的对象是对现实世界中对象的模拟,现实中的对象存在于现实生活中,Java语言中的对象存在于计算机内存中。 Java语言中的对象又称实例。
要全面地认识一个对象就要知道他的信息以及功能(能干什么)。
Java中的对象也是如此,只是叫法不同:Java中将现实对象中的信息称为属性(也叫全局变量),将现实对象中的功能称为方法。
例如
Java语言把一组对象中相同属性和方法抽象到一个Java源文件就形成了类。
类与对象的关系:
- 类是创建对象的模板,确定对象将会拥有的属性和方法。
- 类是对象的抽象化,对象是类的具体化。
- 类是一种数据类型,是对象的数据类型。(不等同于int等基本数据类型:类具有方法)
2.如何定义类
定义类的步骤:a.定义类名 b.定义类的属性 c.定义类的方法
//Student为类名,首字母必须大写,同时遵循标识符命名规则
public class Student{
//属性:属性类型+属性名
String id;
String name;
String address;
//定义方法,下文会详细讲解定义类的方法
public void study(){
System.out.println(name+"正在学习");
}
}
3.对象的创建和使用
通过new关键字创建对象。创建对象又称实例化对象。
使用上面创建的Student类,我们来创建一个对象并且调用他的属性和方法
public class Test{
public static void main(String[] args){
//这里我们使用new关键字来创建一个新对象
Student student1 = new Student();
//本行代码意思是:创建一个Student类的对象,将该对象保存的内存地址赋值给对象student1
//使用对象
student1.id = "20191111111";
student1.name = "小明";
student1.address = "中国";
student1.study();//调用学生study方法
}
}
二、方法与重载
(1)、如何定义方法
方法的语法结构如下。
访问控制符 [修饰符] 返回值类型 方法名( 参数 ){
//方法体
}
1.访问控制符
访问控制符一共有四种public、protected、默认的、private
他们的访问控制级别如图所示
2.修饰符
修饰符有:static、final、synchronized等
这里只说一下static修饰符
- static修饰的方法可以直接使用类名调用,也可用通过使用类创建的对象调用
- 非static修饰的方法只能通过使用类创建的对象调用
public class Person{
public *static* void eat(){//这里用static修饰了eat方法
System.out.println("正在吃饭");
}
public static void main(String[] args){
Person.eat();//这里可以直接用类名调用eat方法
//如果不用static修饰eat方法的话,则只能使用Person类创建的对象,调用Person类中的eat方法
}
}
3.返回值类型
- 如果方法没有返回值类型则需要用void表示。
- 方法返回基本数据类型的数据,则返回值类型必须是返回数据所属的数据类型或者精度更高的数据类型(针对于数值类型的数据)。
int add(int x , int y){
return x+y;
}
double add(int x , int y){//用double也是可以的,精度更高即可
return x+y;
}
- 方法返回引用数据类型的数据,则返回值类型必须是返回数据所属的数据类型或者其父类
public Object Introduce(String name,int age){
//这里用String也可以,返回值类型Object是String的父类
return "我叫"+ name +"我今年"+ age +"岁了"
}
- 方法如果有返回值,则必须借助return关键字将数据返回。
- 方法不能返回多个值
4.方法名
- 方法名遵循标识符命名原则,首字母小写,一般是动词、动名词或者动宾结构。
5.参数
-
方法可以有多个参数,各个参数之间用逗号(,)间隔
(如返回值类型中的示例)
-
方法的参数在整个方法内有效
-
方法参数前面的数据类型用于限制调用方法时所传具体数据的数据类型
6.动态参数
- 动态参数实质为数组
- 动态参数必须位于列表的最后
- 所以一个参数列表只能有一个动态参数,因为只有一个最后的位置
void print(int x , int ... array) {
int result = 1;
for (int i : array) {
result = i*result;
}
System.out.println(result+x);
}
(2)、方法重载
同一个类中有多个方法名相同但参数列表不同的方法,这种现象称为方法重载(overload)。其中参数列表不同包括以下情形
-
参数的个数不同
-
参数的对应类型不同
-
注意!
参数列表不同并不包含参数名不同,也就是说如果方法名相同,方法中参数个数和类型相同,只是参数名不同,这样也不能称之为方法重载。
方法中其它构成部分不参与比较:访问控制符、修饰符、返回值类型
public void overload(int age , String name) {
System.out.println(name + age);
}
public void overload(String name , int age) {
System.out.println(name + age);
}//这里调用哪个取决于传入参数的顺序
三、代码块
Java中代码块分为静态代码块和非静态代码块
- 静态代码块只在类加载时执行一次
static {
//静态代码块
System.out.println("静态代码块");
}
- 非静态代码块每次创建对象时都会执行
{
//非静态代码块
System.out.println("非静态代码块");
}
四、全局变量和局部变量
1.成员变量(全局变量)
- 直接在类中声明的变量叫成员变量(又称全局变量)
- 如果未对成员变量设置初始值,则系统会根据成员变量的类型自动分配初始值:int分配初始值0、boolean分配初始值false,而自定义类型则分配初始值null
- 成员变量定义后,其作用域是其所在的整个类
- 成员变量的定义没有先后顺序,但是最好将成员变量的定义集中在类的顶部
2.局部变量
- 方法中的参数、方法中定义的变量和代码块中定义的变量统称为局部变量
- 局部变量的作用域范围从定义的位置开始到其所在语句块结束
- 如果局部变量的名字与全局变量的名字相同,则在局部变量的作用范围内全局变量被隐藏,即这个全局变量在同名局部变量所在方法内暂时失效
- 如果在局部变量的作用域范围内访问该成员变量,则必须使用关键字this来引用成员变量
- 局部变量在使用以前必须显式初始化或赋值,局部变量没有默认值
- 声明局部变量时,数据类型前除final外不允许有其他关键字,即其定义格式为: [final] 数据类型 变量名 = 初始值