OO 面向对象
OOP 面向对象编程
OOA 面向对象分析
OOD 面向对象设计
面向对象:围绕的是我这个软件是由那些部分完成的,或者说是由那些对象来做的。
在已经找到的问题域中的对象后,我们就要编写一个类来描述每一个对象的属性和行为。
属性是指对象身上有什么值数据。
面向过程:我要解决问题,我要做那些事,它的完成流程是怎么样,就问题解决问题。
行为是对象可以做什么,或者我们想这些对象做什么
什么对象:
万物皆对象,对象因关注而产生。
类是对象的抽象,对象是类的实例。
类是具有相同属性和行为的一组对象的抽象。
在软件中,我们用类来模拟现实生活中的实体。
java中的类用关键字class声明,java源码文件中只能含一个公用(public)类,文件必须与公用类的类名相同,文件扩展名为“java”
/**
定义一个学生类
* */
public class Student {
/**
* 定义类的本质就是在定义一种数据类型。
* 类可以是一种比基本数据类型复杂的多的数据类型,它由属性和行为组成。
* 属性可以换多个,而且有各自的数据类型。
* 行为是类自带的方法,可以直接完成各自各种属于该类的对象和行为组成。
*
* 属性是类身上的值数据,其形式就是变量属性和常量属性。
*
* 变量属性:声明语法采用的是变量的语法,只是比之前的普通变量一个访问修饰符。
* 在效果上,该类 所有的对象都会自动具备属性,但是各个对象可以有各自不同的值。
*
* 常量属性:声明语法采用的是常量的语法,也只是多了一个访问修饰符。
* 在效果上,该类所有的对象都会自动具备该属性,只是值都一样,且不能更改。
*
* 属性的变量常量和java基础学的变常量有什么区别???
*
*
*
* */
/**
* 名字
*/
public String name;
/**
* 年龄
*/
public int age;
/**
* 成绩
*/
public int[] scores;
/**
* 科目
*/
public String subject;
/**
* 常量,班级
*/
public final String CLSS_NAME = "J174";
/**
*行为:在语法表象上,就是方法的定义。
* 它提供的组成部分,表示对象能够什么事情或提供什么功能。
*
* 在面向对象中,static 是一种特殊情况,90%的方法都是没有static的。
* java基础知识为了避免面向对象的概念,从现在开始,直到学习了 static之前,不写。
*
* */
/**
* 自我介绍
*/
public void introduce() {
System.out.println("我是" + name + ",今年" + age + "岁");
}
/**
* 产生对象的基本语法,使用new关键字,后面跟上类名();
* 数据类型 变量名 = new 后面跟上类名();
*/
/**
* 属性的默认初始值:基本数据类型为0,引用数据类型为null
*
* Student stu ==== 只会在内存一个4个字节的变量
* 这个变量存放即将要指向真正的Studtent 对象的引用
* 所以又被称之为“对象名空间”
* new Student() ===== 这才是产生一个新的Student 对象
* 该对象具备一个整体的空间存放各个属性
* 此空间的大小由对象身上的属性大小总和决定。 -------------Student 那么的大
* 类和对象的关系:
* 类是模板,不能直接使用,对象才是具体的实际存在,所以对象有又被称之为某个类的的“实例”
* 通过类产生对象的动作被称之为“实例化”
*
* */
// 操作对象 --- (属性和方法) 对象家 “ . ”操作符 这个. 可以理解为的
/**
* "." 操作符在这里理解为的是时候把他理解为“的”字
* stu的name ==== stu.name
* stu的age ===== stu.age
*
* */
}
定义一个类
public class Student {
/**
* 名字
*/
public String name;
/**
* 年龄
*/
public int age;
/**
* 成绩
*/
public int[] scores;
/**
* 科目
*/
public String subject;
/**
* 常量,班级
*/
public final String CLSS_NAME = "J174";
使用一个类:
import Studet.Student; // 导入一个类
import java.util.Arrays; // 导入一个数组打印包
public class Main {
public static void main(String[] args) {
Student stu = new Student(); // 调用语法
stu.age = 18;
stu.name = "zhangsan";
stu.scores = new int[5];
stu.scores[0] = 1;
System.out.println(Arrays.toString(stu.scores));
System.out.println(stu.age);
System.out.println(stu.name);
System.out.println(stu.CLSS_NAME);
}
}
null 空 什么都没有;
对象的销毁时由java中的垃圾回收机制(GC)来完成的。
它有其自身的算法规则,程序员是没有办法通过代码控制的,控制它什么时候回收,回收什么东西。
在垃圾回收的众多算法中有一条基本规则,它会自动回收没有引用指定的对象。
所以:
1、如果想某个对象在程序途中被回收,那么我们可以主动的把它指向的引用赋值为null。 =null。
类里面是空的就会报空指针异常
NullPointerException 空指针异常;
2、如果对象的引用变量时(对象名空间)是局部变量,那么它所属的模块执行结束。
这个变量的生命周期就到头 ,变量就会消失,那么它所指向的对象也就没有引用指向了,,也会被回收。
3、程序员在代码级别只有一句代码可以和垃圾回收产生交集,System.gc();
注意:这句代码的作用不是主动调用垃圾回收,而是召唤垃圾回收,但是垃圾回收收集器想不想收,什么时候收 ,收那些垃圾还是由它自身算法决定。
new student().gae = 30;
如果一个对象只用一次,那么可以不给该对象起变量名,new出来就直接使用,用完后由于没有引用,就会被回收掉。
访问修饰符一共三个关键字,四种情况;
现在只先掌握两种:public(公共的),private(私有的);
public 修饰的属性或方法,可以在同项目中任何位置访问。
private 修饰符的属性或方法,可以在本类中访问。
变量属性基于 java的官方规范,应该定义为private,然后提供get/set方法,让外部操作 取值/赋值。
get 方法被称之为,访问器 ;只能访问
set 方法被称之为:修改器 ;可以修改
两者在格式和命名上,都有标准的规范。
书写格式:private String name;
当全局变量(属性)和局部变量 重名的时候要访问全局变量就要 + this.访问的名字
此时的this相当于生活中每一个对象说的“我”,指的是当前对象。
this好处:在开发中,this,会有提示,可以提高开发效率。
建议:凡是在访问本类中当前对象的属性和行为时,都养成写this的习惯。
不用考虑什么时候要什么时候不要