第一阶段 javaSE 面向对象01
什么是面向对象
面向过程&面向对象
-
面向过程思想:
步骤清晰简单,第一步做什么,第二步做什么
面向过程适合处理一些较为简单的问题
-
面向对象思想
物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,人后对这些分类进行单独思考,最后,才对某个分类下的细节进行面向过程的思索
面向对象适合处理复杂的问题,适合处理多人协作的问题
-
对于描述复杂的事务,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统,但是,具体到微观操作,仍然需要面向过程的思路去处理
什么是面向对象编程
-
面向对象编程(Object-Oriented Programming ,OOP)
面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据
-
抽象
-
三大特性:封装 继承 多态
-
从认识论角度考虑是先有对象后有类。对象,是具体的事物。类,是抽象的,是对对象的抽象
从代码运行角度考虑是先有类后有对象,类是对象的模板
回顾方法的调用
方法的定义
修饰符
返回类型
break和return的区别:break表示跳出switch和结束循环,return表示结束方法,返回具体的值或者空值
方法名:(见名之意,小驼峰命名法)
参数列表:(参数类型,参数名,不定项参数)
异常抛出
方法的调用:递归
静态方法(用static修饰)
非静态方法(不用static修饰)
- 静态方法和非静态方法的区别:静态方法在其它类中可用 类名.方法名调用,非静态方法只能通过实例化进行调用,两者时间片不同,静态方法随着类的创建出现,非静态方法随着实例的创建而出现,所以在静态方法中不可以直接调用非静态方法,需要实例化,非静态方法之间可以直接相互调用
形参和实参
值传递和引用传递
值传递:
public static void main(String[] args) {
int a=1;
System.out.println(a); //a=1
change(a);
System.out.println(a); //a=1
}
public static void change(int a){
a=10; //a=10
}
引用传递:本质还是值传递
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name); //null
change(person);
System.out.println(person.name); //菜鸟
}
public static void change(Person person){
person.name = "菜鸟";
}
}
class Person{
String name; //null
}
this关键字
类与对象的创建
类与对象的关系
-
类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物。
Person类,Car类等,这些类都是用来描述/定义某一类具体的事物应该具备的特定和行为
-
对象是抽象概念的具体实例
能够体现出特点,展现出功能的是具体的实例,而不是一个抽象的概念,张三就是人的一个具体实例
一个项目应该只存一个main方法,即一个启动类
public class Student {
String name;
int age;
public void study(){
//this表示当前类,可以调用当前类的属性和方法
System.out.println(this.name+"在学习");
}
}
创建和初始化对象
- 使用new关键字创建对象
public static void main(String[] args) {
//类是抽象的,需要进行实例化
//类实例化后会返回一个自己的对象
//xm对象就是一个Student类的具体实例
Student xm = new Student();
xm.age = 14;
System.out.println(xm.name);//null
System.out.println(xm.age);//14
}
-
使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象,进行默认的初始化以及对类中构造器的调用
-
类中的构造器也成为构造方法,实在进行创建对象的时候必须要调用的,并且构造器有以下两个特点:
- 必须和类的名字相同
- 必须没有返回类型,也不能些void
构造器必须要掌握
public class Person {
//一个类即使什么都不屑,它也会存在一个方法,显示的定义构造器
String name;
//无参构造
public Person() {
}
//有参构造:通过构造方法传参,给实例化对象的属性传值
public Person(String name){
this.name = name; //当前类的name属性=参数值
}
}
构造器总结
构造器:
- 和类名相同
- 没有返回值
作用:
- new (实例化一个对象) 本质实在调用构造方法
- 初始化对象的值
注意点:
定义有参构造之后,如果想使用无参构造,显示的定义一个无参构造
快捷键 :Alt + Insert 点击construct ,插入构造方法
创建对象内存分析
在堆中有一个方法区,方法区中有静态方法区,类创建的时候(包括驱动类和普通的抽象类)在方法区进行加载,静态方法随着类一起初始化,在静态方法区中加载
实例化对象的时候,main方法在栈中加载,在栈中保存了引用变量名,不同对象的引用变量名不同,分别指向堆中开辟的不同的内存空间,相应的内存空间中包含不同对象各自的属性和方法
简单小结类与对象
-
类与对象
类是一个模板,是抽象的,对象是一个具体的实例
-
方法:掌握方法的定义与调用
-
对象的引用
引用类型:除了8大基本类型,其余都是引用类型,引用类型是指对象都是通过引用来操作的,即栈中的引用变量指向堆中保存对象的内存空间
-
属性:字段 field 成员变量
默认初始化:
数字:0 0.0 char : u0000 boolean : false
引用:null
赋值公式:修饰符 属性类型 属性名 = 属性值;
-
对象的创建和使用
必须使用new关键字 构造器来创建对象
-对象属性的调用和赋值
-对象方法的调用
-
类
包括静态的属性和动态的方法