面向对象
1.软件开发方式
2.成员变量与局部变量
3.类与对象
4.构造器
5.封装
6.访问权限修饰符
7.JavaBean
软件开发方式
面向过程
强调的是我该怎么去做,执行过程是先干什么,再做什么,一步一步的执行过程
面向对象
面向对象强调的是我该让谁来做,强调的是让别人来帮我做事.
在面向对象的世界,如果要做事情,就必须要找对象
为什么存在面向对象?
对象是数据的载体,开发本质上就是把数据存入计算机中.
需要一种更复杂的数据类型一定是要自定义的
进而,软件开发就是把现实中的数据存储到计算机中,必须把共同的特征和行为抽象到计算机中作为类而存在,类又可以创建对象
软件开发数据的展示,一定要找对象
==>无论你做什么都需要找对象
==>在你眼里一切皆需要对象 =
=>你眼里只有对象
==>面向对象
==>面向什么你就可以看到什么
面向对象的三大特征
- 封装
- 继承
- 多态
抽象
抽象是一个概念,比如人类就是一个抽象的概念,但是具体到人的姓名,年龄,性别,就是对象的实例化了
所谓抽象,就是把现实中的事物,提取其公共特征和行为,也就是提取其成像的的部分,进而提取到计算机的过程.
–>计算机怎么描述这个抽象(定义一个类) -->通过类创建对象
抽象的步骤
1.归类并确定其类型,一般使用名词来定义类名
2.找到共同的特性,提取成字段,一般使用名词,抽象特征时要结合当前的业务需要
3.找到共同的行为,提取成方法,一般使用动词,抽象行为时要结合当前的业务需要
成员变量和局部变量
- 成员变量:直接定义在类中,方法外 ,也可以称为字段 ,实例变量,作为类的成员
- 局部变量:除了成员变量外,其他都是局部变量.一般在
1.方法内
2.方法的形参内
3.代码块中{}
初始值
变量的初始化代表了要在内存中开辟空间,变量只有被初始化了,才能使用
成员变量:默认有初始值,不同类型有不同初始值,如下表格
局部变量:没有初始值,需要手动初始化
数据类型 | 默认初始化值 |
---|---|
byte,short,int,long | 0 |
float,double | 0.0 |
char | 一个空字符(空格) ,’\u0000’ |
boolean | false |
引用数据类型 | null,不引用任何对象 |
作用域
成员变量:在定义的类中都有效
局部变量:在自己所在的花括号内有效
注意:
1.{},称为代码块,可以形成作用域
2.作用域可以嵌套,内层作用域可以访问外层作用域的变量,外层不能访问内层作用域的变量
生命周期
成员变量:存储在堆中,随着对象的销毁而销毁
局部变量:存储在栈中,随着定义方法的调用结束而销毁
局部变量存储在方法中,每次调用方法都会在栈空开辟一块内存空间(栈帧),方法调用结束,栈帧被销毁,内存中存储的变量也自然销毁了
类与对象
类
类是一组具有相同特征和行为的对象的抽象描述(集合),类是一个群体概念
类可以看作是对象的数据类型
- 成员变量表示状态(特征)
- 成员方法表示行为(功能)
对象
对象是类这个群体中的一个唯一的,独立的个体,对象时个体概念.个体在程序中称为实体或者实例
任何事物都存在一定的功能,在面向对象中,任何事物都可以看成对象,正所谓"万物皆对象",你没有对象?那就new一个对象出来吧!
对象操作
- 创建对象
1.类名 对象变量名 = new 类名();
2.匿名对象:创建对象之后没有赋值给某一个变量,只能使用一次
new 类名();
- 对象操作字段(成员变量)
1.给字段设置数据
对象变量名.字段名 = 值;
2.获取字段数据
数据类型 变量 = 对象变量名.字段名;
3.对象调用方法
对象变量名.方法(参数);
构造器
构造器(构造方法)作用:用来创建对象和给对象做初始化操作
语法:
[修饰符] 类型(参数){
//方法体
}
1.构造器名称和类型相同
2.不能定义返回值类型
3.构造器中不能使用return语句
默认构造器
如果一个类没有显示的定义无参构造方法,jvm默认会分配一个无参构造方法
如果开发者显示定义了无参构造方法,jvm不再分配无参构造
例如定义猫类的无参构造
public Cat(){
}
有参构造器
如果想在构建对象时就给对象赋值,可以使用有参构造
在带参数和不带参数的构造器,他们之间的关系构成重载关系
public class Cat {
String name;
int age;
//无参数构造器
public Cat() {
}
//带参数构造器
public Cat(String n, int a) {
name = n;
age = a;
}
}
封装
面向对象三大特征之一:封装
把对象的字段和方法独立放在一个模块(类)中包装起来,隐藏对象的数据和功能的实现细节,通过getter,setter的方式来拿到数据
定义猫类
public class Cat {
private String name;
private int age;
void catSay(){
System.out.println("喵喵喵");
}
public Cat(){
}
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
测试类
public class CatDemo {
public static void main(String[] args) {
Cat c2= new Cat();
c2.setAge(22);
c2.setName("kent");
System.out.println(c2.getName());
System.out.println(c2.getAge());
}
}
访问权限修饰符
修饰符 | 类内部 | 同一个包 | 子类 | 任何地方 |
---|---|---|---|---|
private | √ | |||
无 | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
JavaBean
一种规范
- 类必须使用public修饰
- 必须保证有 公共无参数构造器
- 字段使用private修饰(私有化),提供getter和setter方法
getter方法:仅仅用于返回某一个字段的值
setter方法:仅仅用来给某一个字段设置值
定义JavaBean规范
学生类
public class Student {
private String name; //姓名
private int age; //年龄
private String gender; //性别
private double enScore;//英语成绩
private double mathScore;//数学成绩
private double cnScore;//语文成绩
//无参构造
public Student(){
}
//有参构造
public Student(String name, int age, String gender, double enScore, double mathScore, double cnScore) {
this.name = name;
this.age = age;
this.gender = gender;
this.enScore = enScore;
this.mathScore = mathScore;
this.cnScore = cnScore;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void SetAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public double getEnScore() {
return enScore;
}
public void setEnScore(double enScore) {
this.enScore = enScore;
}
public double getMathScore() {
return mathScore;
}
public void setMathScore(double mathScore) {
this.mathScore = mathScore;
}
public double getCnScore() {
return cnScore;
}
public void setCnScore(double cnScore) {
this.cnScore = cnScore;
}
}