1.认识类与对象
要学习面向对象,就要先去了解类。类是什么?我们可以这样说,类(用关键字class修饰)是描述一类事物的名词,这一类事物具有相同的元素,使得一提到这个名词脑海里就会由这个事物的形象。例如:手机,电脑等。事物本身具有的元素就叫做事物的属性(即类的属性),而这个事物能用来做什么就是事物的行为(即类的方法)。
在下面我简单的定义了一个手机类,它具有处理器、电池和显示屏三个属性,以及一个打游戏的行为。
public class Phone {
String processor;//处理器(Phone类的一个属性)
String battery;//电池(Phone类的一个属性)
String display;//显示屏(Phone类的一个属性)
//Phone类的行为(即是Phone可以用来干什么)
public void playGame(){
System.out.println("打游戏");
}
}
了解了类之后,就要认识对象了。对象与类的关系是一种从属的关系,对象是类的一个实例化。简单地说,就是给这个类确定的值,让他不再是一个抽象的概念,而变成具体的。例如:你有一个手机,我也有一个手机,但是他们不是相同的。
public static void main(String[] args) {
//创建一个名为phone的Phone类的对象
Phone phone1 = new Phone();
//为刚刚创建的对象的各个属性进行赋值
phone1.processor = "晓龙888";
phone1.battery = "4500mAh";
phone1.display = "曲面屏";
//用刚刚创建的方法去调用打游戏的方法
phone1.playGame();//输出-->打游戏
}
2.方法
方法简单的说就是解决某一个问题的所有步骤。
方法的定义:
访问修饰符 返回值类型 方法名(形参){
//方法体
//如果返回值的类型不是void,那么就要返回方法定义时规定返回的类型
}
//定义一个无返回值,需要传入两个参数,用于求和的方法(方法名为add)
public void add(int num1,int num2){
//将传入的两个数的和打印在控制台
System.out.println(num1+"+"+num2+"="+(num1+num2));
}
//定义一个有返回值,需要传入两个参数的求和方法
public int add(int num1,int num2){
//将传入的两个数的和进行返回
return num1+num2;//返回的值应该用变量去接收或直接使用,否则没有意义
}
按照返回值的类型来分,可以将方法分为有返回值方法和无返回值方法。
而按照是否需要参数来分,也可以分为需要参数的方法和无需参数的方法
public static void main(String[] args) {
outPut();//输出:这是一个无返回值的方法
int num = Random();//定义一个变量来接收返回的数据
System.out.println(num);//输出随机产生的数值
boolean flag1 = isEvenNumber(4);//定义一个变量来接收返回的数据
System.out.println(flag1);//输出true
boolean flag2 = isEvenNumber(5);//定义一个变量来接收返回的数据
System.out.println(flag2);//输出false
}
//定义一个无返回值的方法(不需要参数)
public static void outPut() {
System.out.println("这是一个无返回值的方法");
}
//定义一个有返回值的方法(不需要参数)
public static int Random() {
int num = new Random().nextInt(10);//随机生成一个0~9之间的数字
return num;//将随机生成的数字进行返回(返回值的类型必须与定义方法时确定返回的数据类型相同)
}
//定义一个判断一个数是否是偶数的方法(需要传入参数)
public static boolean isEvenNumber(int i) {
//boolean为确定返回的数据类型为boolean
//()里的是int i形式参数(形参)
if (i % 2 == 0) {
return true;//返回true
} else {
return false;//返回false
}
}
运行结果如下
方法的重载
方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。调用时,会根据不同的参数表选择对应的方法。(判断两个或多个方法是否重载,是不考虑访问修饰符和返回值类型的)
public class Calculator {
//需要2个参数为int类型数据的方法
public int add(int a, int b) {
System.out.println("需要2个int类型数据的方法");
return a + b;
}
//需要3个参数为int类型数据的方法
public int add(int a, int b, int c) {
System.out.println("需要3个int类型数据的方法");
return a + b + c;
}
//需要3个参数为double类型数据的方法
public double add(double a, double b, double c) {
System.out.println("需要3个double类型数据的方法");
return a + b + c;
}
public static void main(String[] args) {
Calculator c = new Calculator();//创建Calculator的对象
int num1 = c.add(5, 7);//定义一个变量来接收add方法返回的数据(也可以像下面一样直接输出)
System.out.println(num1);//输出12
System.out.println(c.add(12, 12, 12));//输出36
System.out.println(c.add(2.3, 4.7, 3.9));//输出10.9
}
}
运行结果如下
3.构造方法
构造方法是一个比较特殊的方法,通过构造方法可以完成对象的创建,以及对象的初始化。也就是说:构造方法是用来创建对象,并且同时给对象的属性赋值。
每一个类都有一个系统默认的无参构造方法,但是一旦你写了一个有参的构造方法,那么就不会在给你提供这个默认的无参构造方法了。所以,如果你写了有参构造,那么一定要将无参构造方法同时给写上去。
构造方法定义格式:
访问修饰符 构造方法名(形式参数列表){
//构造方法体
//通常在构造方法体中给属性进行赋值,完成属性的初始化
}
//下面定义一个学生类,里面写了无参构造和有参构造
public class Student {
String name;//姓名属性
String gender;//性别属性
int age;//年龄属性
//无参构造
public Student() {
}
//有参构造
public Student(String name, String gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
}
}
4.成员变量和局部变量
成员变量定义在类中方法外,它的作用域是整个类。而局部变量则是定义在方法、代码块中或者是方法的参数列表中(方法声明时),它的作用域就是当前的结构体。
public class Student {
String name;//成员变量
String gender;//成员变量
int age;//成员变量
//无参构造
public Student() {
}
//有参构造
public Student(String name, String gender, int age) {
//方法的参数列表里的变量就是局部变量
//如果局部变量和成员变量同名,那么程序就会遵循就近原则,去找局部变量
//而要改变变量指向就要给它加上this关键字,这样它才能指向成员变量
this.name = name;//等号右边的name就是局部变量
this.gender = gender;//等号右边的gender就是局部变量
this.age = age;//等号右边的age就是局部变量
}
}