面向对象编程初级
文章目录
1. 类与对象。
类是抽象的,对象是具体的
public class demo01 {
// 类是一个抽象的,对象是一个具体的。
// 比如 猫类就是一个抽象的概念,而花猫,加菲猫就是具体的。
public static void main(String[] args) {
// 让抽象的类实例化成为具体的对象
// 给猫设定个性的属性和行为
Cat flowerCat = new Cat();
flowerCat.name = "花猫";
flowerCat.age = 1;
flowerCat.speak();
Cat JiafCat = new Cat();
JiafCat.name = "加肥猫";
JiafCat.age = 3;
JiafCat.speak();
}
// 创建一个class的猫类。
// 可以给猫类规定一些属性和行为
class Cat {
public String name;
public int age;
public void speak() {
System.out.println("我叫" + name + "我今年" + age + "岁了" + "我会喵喵喵");
}
}
//输出:
//我叫花猫我今年1岁了我会喵喵喵
//我叫加肥猫我今年3岁了我会喵喵喵
2.成员方法
2.1定义:
访问修饰符 返回数据类型 方法名(形参列表…) {
//方法体 语句;
return 返回值;
}
2.2注意事项和使用细节
2.2.1访问修饰符:
java 提供四种访问控制修饰符号,可以用来修饰类的属性,成员变量,和类。注意的是只有默认的和public才能修饰类!,并且遵循上述访问权限的特点。
2.2.2返回数据类型:
-
一个方法最多有一个返回值
-
返回类型可以为任意类型,包含基本类型或引用类型(数组,对象)
-
如果方法要求有返回数据类型,则方法体中最后的执行语句必须为 return 值; 而且要求返回值类型必须和 return 的 值类型一致或兼容
-
如果方法是 void,则方法体中可以没有 return 语句,或者 只写 return
2.3成员方法调用机制
2.4成员方法传参机制
2.4.1基本数据类型传参的机制
可以用一个例子,比如声明两个变量,然后写一个成员方法将两个变量传入形参并交换数值。最后在观察两个变量是否会发生变化
public class demo02 {
//成员方法基本数据类型传参机制
public static void main(String[] args) {
int a = 10;
int b = 20;
AA obj = new AA();
obj.swap(a, b); //调用swap方法
//最后查看a,b数值
System.out.println("main 方法 a=" + a + " b=" + b);//a=10 b=20
}
}
class AA {
public void swap(int a,int b){
//交换前的数值
System.out.println("\na 和 b 交换前的值\na=" + a + "\tb=" + b);//a=10 b=20
//完成了 a 和 b 的交换
int tmp = a;
a = b;
b = tmp;
System.out.println("\na 和 b 交换后的值\na=" + a + "\tb=" + b);//a=20 b=10
}
}
总结:基本数据类型,传递的是值(值拷贝),形参的任何改变不影响实参!
2.4.2 引用数据类型传参的机制
同样可以用一个例子,比如声明一个数组,然后写一个成员方法数组传入形参并修改数组数值。最后在观察数组是否会发生变化
public class demo03 {
public static void main(String[] args) {
//成员方法引用数据类型传参机制
int[] a={1};
BB abj = new BB();
abj.swap(a);
System.out.println(a[0]);//4
}
}
class BB {
public void swap(int a[]){
a[0]=4;
}
}
总结:引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参
3.方法递归
简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂问题,同时可以让代码变 得简洁
如图:
4.重载
基本介绍:
java 中允许同一个类中,多个同名方法的存在,但要求 形参列表不一致!
1)方法名:必须相同
2)形参列表:必须不同(形参类型或个数或顺序,至少有一样不同,参数名无要求)
3)返回类型:无要求
public class demo04 {
public static void main(String[] args) {
//方法重载
A AA=new A();
AA.B(1,2);
AA.B(1);
}
}
class A{
public void B(int a,int b){
System.out.println("这是参数一");
}
public void B(int a){
System.out.println("这是参数二");
}
}
5.可变参数
基本概念
java 允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。 就可以通过可变参数实现
基本语法
访问修饰符 返回类型 方法名(数据类型… 形参名) { }
如:若一个类中多个同名同功能但参数个数不同的求和方法,使用可变参数可以使代码更加简洁高效
public class demo05 {
//可变参数
public static void main(String[] args) {
int[]a={1,2,3,4,5,6,8};
T t =new T();
// t.f1(a); 可加入数组
t.f1(1,2,5);
}
}
class T {
public void f1(int... nums) {
int num=0;
for (int i=0;i<nums.length;i++){
num+=nums[i];
}
System.out.println("长度=" + nums.length+"求和为"+num);}
}
注意
1)可变参数的实参可以为0个或任意多个。
2)可变参数的实参可以为数组。
3)可变参数的本质就是数组.
4)可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后
5)一个形参列表中只能出现一个可变参数
6.作用域
**全局变量:**也就是属性(成员变量),作用域为整个类体性,可以被本类使用,或其他类使用。
局部变量:一般是指在成员方法中定义的变量,只能在本类中对应的方法中使用
注意事项和细节使用
1.属性和局部变量可以重名,访问时遵循就近原则。
2.在同一个作用域中,比如在同一个成员方法中,两个局部变量,不能重名。
3.全局变量生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁,可加修饰符
局部变量生命周期较短,伴随着它的代码块的执行而创建, 伴随着代码块的结束而销毁。即在一次方法调用过程中
不可加修饰符
7.构造方法
基本语法
[修饰符] 方法名(和类名一样)(形参列表){方法体; }
作用:我们在创建人类对象时,是先把一个对象创建好后,再给他的年龄和姓名属性赋值。如果现在要求,在创建人类的对象时,就直接指定这个对象的年龄和姓名。这时就可以使用构造方法。
注意:
-
构造方法的修饰符可以默认, 也可以是 public protected private
-
构造方法没有返回值
-
方法名 和类名字必须一样
-
参数列表 和 成员方法一样的规则
-
构造方法的调用, 由系统完成
8.this关键字
-
this 关键字可以用来访问本类的属性、方法、构造器
-
this 用于区分当前类的属性和局部变量
-
访问成员方法的语法:this.方法名(参数列表);
-
访问构造方法语法:this(参数列表); 注意只能在构造方法中使用(即只能在
构造方法中访问另外一个构造方法, 必须放在第一 条语句)
- this 不能在类定义的外部使用,只能在类定义的方法中使用。