从本周开始,正式进入Java面向对象的学习。
面向对象:一种全新的组织代码方式,更加符合人类思维习惯。
一、方法
1、方法
方法类似C++中的函数,先创建才可以使用。
2、定义格式
public static 返回值类型 方法名(参数) {
方法体;
return 数据 ;
}
若无数据返回,返回值类型为void,而且方法体中没有return。
3、调用格式
带参数: 方法名(参数1,参数2);
不带参数:方法名();
4、重载
多个方法在同一个类中,有相同的方法名。
二、类与对象
1、类
定义:
类是对现实生活中一类具有共同属性和行为的事物的抽象,是对现实事物的一种描述。
形成:
属性:指事物的特征。
默认初始化:
整数 | 0 |
小数 | 0.0 |
引用 | null |
Boolean | false |
数组 | null |
行为:指事物能执行的操作。
2、对象
定义:是一个看得见,摸得着的实体。
3、关系
类是抽象的概念,仅仅是模板。而对象则为具体存在的事物。
三、面向对象设计步骤
1、发现类
类理解为分类,将万事万物归类。
2、找出属性
属性,为名词。
3、找出行为
行为,为动词。
数据抽象:是数据和处理方法的结合。
四、定义类和创建对象
1、定义类
public class 类名 {
// 成员变量
变量1的数据类型 变量1;
变量2的数据类型 变量2;
…
// 成员方法
方法1;
方法2;
}
定义phone类
public class phone {
String brand;
int price;
public void slogan() {
if(brand.equals("小米11Ultra")) {
System.out.println("生生不息");
}else if(brand.equals("华为mate40Pro")) {
System.out.println("跃见非凡");
}
}
public void soc() {
if(brand.equals("小米11Ultra")) {
System.out.println("骁龙"+888);
}else if(brand.equals("华为mate40Pro")) {
System.out.println("麒麟"+9000);
}
}
}
2、对象
创建对象:
类名 对象名 = new 类名();
调用成员:
对象名.成员变量
对象名.成员方法();
运用创建对象,调用成员,创建测试类Phonetest
public class Phonetest {
public static void main(String[] args) {
phone p1 = new phone();
p1.brand="华为mate40Pro";
p1.price=6499;
System.out.println(p1.brand);
System.out.println(p1.price);
p1.slogan();
p1.soc();
phone p2 = new phone();
p2.brand = "小米11Ultra";
p2.price = 5999;
System.out.println(p2.brand);
System.out.println(p2.price);
p2.slogan();
p2.soc();
}
}
在一个Java Project下,phone类,Phonetest类运行结果如下:
华为mate40Pro
6499
跃见非凡
麒麟9000
小米11Ultra
5999
生生不息
骁龙888
五、变量
1、成员变量
有默认初始化值;
随着对象的存在或消失;
在类中方法外;
2、局部变量
无默认初始化值,要先定义,赋值;
方法调用存在,调用完毕消失;
在方法内部,方法声明上;
3、局部变量是栈内存,成员变量是堆内存。
五、封装
1、封装的意义
之前定义的成员变量,可以任意赋值,若该赋值不合适,易产生错误。
封装可以理解为一种保护屏障,可防止代码、数据被随机访问,更安全。
2、封装
private,被修饰的成员,只能在本类进行访问。被其他类使用时:
读取:public 类型 get变量名(); 变量名首字母大写
设置:public 类型 set变量名(变量); 变量名首字母大写
如定义一个phone类
public class phone {
private String brand;
private int price;
public String getBrand() {
return brand;
}
public void setBrand(String b) {
brand = b;
}
public int getPrice() {
return price;
}
public void setPrice(int p) {
price = p;
}
}
3、this关键字
为区分局部变量和成员变量的重名,this修饰的变量用于指代成员变量。
形参与变量名相同,不带this修饰的变量指的是形参;
形参与变量名不相同,不带this修饰的变量指的是成员变量;
定义一个phone类,输入
private String brand;
private int price;
右键单击,选择Source,点击Generate Getter and Setters,继续选择,点击Generate,可得到
public class phone {
private String brand;
private int price;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
此种方式与2中一致。
六、构造方法
1、理解
定义:构造方法是构造对象的方法。
格式:
public class 类名{
修饰符 类名( 参数 ) {
}
}
作用:数据初始化
若没有定义构造方法,系统将给出一个默认的无参数构造方法。如果定义了构造方法,系统将不再提供默认的构造方法。
2、应用
定义一个phone
public class phone {
private String brand;
private int price;
public phone() {}
public phone(String brand) {
this.brand = brand;
}
public phone(int price) {
this.price = price;
}
public phone(String brand, int price) {
this.brand = brand;
this.price = price;
}
public void show() {
System.out.println(brand+" " + price);
}
}
定义phonetest
public class phonetest {
public static void main(String[] args) {
phone a=new phone();
a.show();
phone b=new phone("华为mate40Pro");
b.show();
phone c=new phone(6499);
c.show();
phone d=new phone("华为mate40Pro",6499);
d.show();
}
}
a为默认无参构造,结果:null 0
b中brand为带参构造,price为默认无参构造,结果:华为mate40Pro 0
c中price为带参构造,brand为默认无参构造,结果:null 6499
d中都为带参构造,结果:华为mate40Pro 6499
每个人都有自己的困惑,这也是人生有趣,有意义的原因,当我对世界开始好奇,并提出质疑的时候,就有机会改变世界。风华正茂的我们,永远相信美好的事情即将发生!