Java面向对象/类和对象/封装/private/public关键字
面向对象
(写程序的套路)
为什么面对对象编程?
符合人类思维习惯,编程更简单,更好理解
面对对象重点学习什么?
学习获取已有对象并使用
学习如何自己设计对象并使用(面向对象语法)
类和对象
类
类是对现实生活中一类具有共同属性和行为的事物的抽象/类是对象的数据类型,类是具有相同属性和行为的一组对象的集合(设计图)
定义类
类的组成是由属性和行为两部分组成
属性:事物的特征,在类中通过成员变量来体现
行为:事物可以执行的操作,在类中通过成员方法来体现
注:如何找到实际开发项目中的属性与行为?名词--》属性 动词--》行为
/*
手机类:
类名:
手机(Phone)
成员变量:
品牌(brand)
价格(price)
成员方法:
打电话(call)
发短信(sendMessage)
*/
public class Phone {
//成员变量(属性)
String brand;
int price;
//成员方法(行为/方法)
public void call() {
System.out.println("打电话");
}
public void sendMessage() {
System.out.println("发短信");
}
}
类的分类
- 用来描述一类事物的类,专业名称为Javabean,在Javabean中是不写main方法的,上面关于手机的代码是Javabean类
- 编写main方法的类,叫做测试类,可以在测试类中创建javabean类的对象并进行复制调用,在学面向对象之前写的都是测试类
关于类的注意事项
- 类名首字母大写,驼峰命名法,见名知意,不能用关键字
- 一个Java文件中可以定义多个class类,且只有一个类是public修饰,而且public修饰的类名必须为代码文件名(实际开发中,建议一个文件定义一个class类)
- 成员变量的格式:(修饰符) 数据类型 变量名称 = 初始化值;(一般无需指定初始化值,存在默认值)
对象
是真实存在的具体实例(客观存在的事物皆为对象,即万物皆对象)
在Java中,必须先设计类,才能获得对象
创建对象
格式:类名 对象名 = new 类名();
范例:Phone p = new Phone();
使用对象
1:使用成员变量
格式:对象名.变量名
范例:p.brand
2:使用成员方法
格式:对象名.方法名()
范例:p.call()
public class PhoneDemo {
public static void main(String[] args) {
//创建对象
Phone p = new Phone();
//使用成员变量
System.out.println(p.brand);
System.out.println(p.price);
p.brand = "小米";
p.price = 2999;
System.out.println(p.brand);
System.out.println(p.price);
//使用成员方法
p.call();
p.sendMessage();
}
}
类与对象的关系
- 类:类是对现实生活中一类具有共同属性和行为的事物的抽象
- 对象:是能够看得到摸的着的真实存在的实体
- 简单理解*类是对事物的一种描述,对象则为具体存在的事物
封装
封装概述:是面向对象三大特征之一(封装,继承,多态)
对象代表什么,就得封装对应的数据,并提供数据对应的行为
封装的好处:降低学习成本,不用记对象有哪些方法,需要时去找就行
private/public关键字
private/public关键字可以确保正确的可以赋值,错误的无法赋值
private是一个修饰符,可以用来修饰成员(成员变量,成员方法)
被private修饰的成员,只能在本类进行访问,针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作
针对每个私有化的成员变量,都要有get和set方法
提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰
提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰
class Student {
//成员变量
String name;
private int age;
//提供set方法,给成员变量age进行赋值
public void setAge(int a) {
if(a<0 || a>120) {
System.out.println("你给的年龄有误");
} else {
age = a;
}
}
//提供get方法,对外提供name属性
public int getAge() {
return age;
}
//成员方法
public void show() {
System.out.println(name + "," + age);
}
}
public class StudentDemo {
public static void main(String[] args) {
//创建对象
Student s = new Student();
//给成员变量赋值
s.name = "林青霞";
s.setAge(30);
//调用show方法
s.show();
}
}
我们可不可以把setAge方法去掉,然后在main方法中直接判断年龄是否正确?
不可以,因为对象代表什么,就得封装对应的数据,并提供数据对应的行为,student方法封装了学生的所有属性,对属性校验的方法也必须封装在student方法中