1.面向对象

1.1.概念

面向对象是一种编程思想,通过这种思想可以把生活中的复杂事情变得简单化,从原来的执行者变成指挥者,面向对象是基于面向过程而言的

1.2.三大特征

封装性:把相关的数据封装成了一个”类”组件
例如:商品,订单,个人信息这些关键词对应的响应数据。我们可以将其封装成一个类
继承性:是子类自动共享父亲的属性和方法,这是类之间的一种关系
多态:增强软件的灵活性和重用性

2.类和对象

2.1.类

java的基本单位就是类
类是一类事物的抽象
可以理解为蓝图模板

2.2.对象

每个对象都有三个特点:对象的状态、对象的行为和标识
对象的状态是用来描述对象的基本特征(类中模板数据具体化)
对象的行为用来描述对象的功能(方法)
对象的标识是指该对象在内存中都有唯一一个地址和其他对象区别开来(地址是唯一的)

2.3.类和对象的关系

对象是类的实例(具体)
类是对象的类型

3.JAVA的内存分配

*3.1.栈(掌握)

存储局部变量
局部变量:定义方法声明上和方法中的变量
基本数据类型为值传递,保存对应的值
栈:先进后出原则,随着方法的结束而消失

*3.2.堆(掌握)

*存储new出来的数组或对象
随着没有引用消失

*3.3.方法区

*代码(静态变量,方法等)
随着类的消失而消失

*3.4.本地方法区

*和系统相关

*3.5.寄存器

给CPU使用
速度最快的地方,因为寄存器十分有限,故只能通过编译器自行分配

例1:数组内存分配
int[] a = new int[3];
int[]a为变量名进栈,保存的是地址引用,对象直接的区别也是通过地址引用来区别
并且保存的地址的变量名可以为多个,并且其中一个被修改,全体引向的变量名所引向的值也被修改(指向的都是一个值)
new int[3]为new出的对象,保存为堆,有一个引用值,变量名所保存的地址指向的就 是这个对象
例2:关于二维数组的内存分配
int[][]进栈,保存的是地址第一个[]地址
new int[1?][2?]进堆,并且[1?]保存的是存储[2?]的地址[2?]保存的是真实值通过坐标查找对应数值
当[2?]为空时[1?]存储为null
例3:一个对象的内存分(模拟为Car.class)
将磁盘上的文件编译成字节码文件,而运行时字节码文件进入内存的方法区(模板进入方法区),
调用main方法 main进栈 Car加载进入内存,虽然后通过Car创建对象,在堆里创建对象(实例)
通过变量名接收(进栈)为对应的地址引用,通过对应的地址引用进行赋值修改,调用对应的run方法(进栈),然后弹栈(弹出)
例4:当例3基础上出现了二个对象
当前变量名引用指向了第二个对象
这时触发了java的gc垃圾回收机制,当对象没有引用时gc会将没有引用的对象进行清理
(有引用则不清理)

4.封装

封装,隐藏对象属性和实现实现,仅仅对外提供公共的访问方式
提高安全性,提供重用性
应用场景 类,方法
常用修饰词private 私有化,其作用为,除了当前类或方法可以访问其他情况不准访问

5.构造方法

构造方法分为两种,有参构造和无参构造
作用:
为类相关属性进行初始赋值,当使用无参构造时,则使用默认值(0,0.0,null等)
当使用有参构造时则将相关属性赋值为对应的值
无参构造:自动生成,当有有参构造时则不再自动生成,需要自行生成
有参构造:手动生成,可以存在多个并且可以和无参构造一同存在,并且编译器会通过对该对象属性赋值时自动进行匹配
class c{
String country;
{
country=”中国”;
}
public c() {
System.out.println(“1号选手,来自”+country);
}
public c(int a) {
System.out.println(“2号选手,也来自”+country);
}
}
当继承后,构造方法的第一行会有一个默认语句super
并且当成员变量和局部变量名相同时采取就近原则

5.1.构造代码块

在类的内部,方法外部的代码块
作用:通常用于抽取构造方法中的共性代码
每次调用构造方法都会先调用构造代码块(优于构造方法)

5.2.局部代码块(使用较低)

在方法内部的代码块
作用:
通常控制变量的作用范围,出了括号就失效
局部代码块顺序执行
class Student{
{
System.out.println(“构造代码块1”);
}

public void init(){
{
System.out.println(“局部代码块”);
}
}

{
System.out.println(“构造代码块2”);
}
}

6.this关键字

this代码本类对象的一个引用对象
例:A a = new A();
a.run() == (A类中)this.run()

当变量名重复时(成员变量和局部变量)
通过this.来区别成员变量和局部变量

7.继承

继承是面向的对象最显著的一个特征
概念:
继承就是从已有的类派生出新的类,这个派生类可以拥有继承来的所有属性和方法,在此同时还可以拓展新的功能和属性,大大的开发了开发时间和成本。
特点:
使用extends关键字
相当于子类复制了父类的功能
继承可以传递
不能继承父类的私有属性(private修饰)
继承多用于功能修改,拥有父类功能的同时进行拓展
class Fu{
String skin=”黄种人”;
String addr=”大成都”;

public void speak(){
System.out.println(“Fu…speak()”);
}
}
class Zi extends Fu{
}

8.super关键字

super关键字可以使用父类的内容
super代表一个父类的引用对象
使用的前提必须为调用位置第一行

9.方法的重写

继承父类的子类有了父类的功能的同时,当子类拥有和父类相同签名方法,且内容不一样
,方法的重写,当调用子类的方法实现的即是重写过的方法
注:
不能重写父类的私有方法(private修饰)
重写的访问权限不能大于父类
重写的只有方法,变量不能被重写。子类写了与父类相同的变量则会有两个相同的变量一个为子类一个为父类(不可见)

10.区别问题1

10.1.this和super的区别

this代表当前本类对象的引用,super代表的父类
this作用是用来区别成员变量和局部变量
super作用是用来区别本类变量和父类变量
super和this不可以出现在同一个构造方法里,他们出现都要放在第一行

10.2.重写和重载的区别

重载:
是指同一个类中多个方法有多个名字,但是方法具体参数不一样,编译器可以通过 输入的参数自动绑定对应的方法
重写:
存在于父类和子类之间的,子类定义的方法和父类的名字参数相同,当子类调用法 时实现的是对应子类的方法
重写是父类和子类多态性的表现
重载是一个类多态性的表现

11.static关键字

概念:
是java中的一个关键字
用于修饰成员方法和成员变量
特点:
可以修饰成员变量和方法
随着类加载,优先于对象加载
全局只有一份,全局共享
可以直接被类名调用
static不能和super和this共用
静态只能调用静态,非静态可以随便调用
static存在于方法区中

12.静态代码块

在类加载时就加载,并且只加载一次,一般用于项目的初始化
执行顺序 静->构造代码块->构造方法->局部
package cn.tedu.staticdemo;

public class Test4 {
public static void main(String[] args) {
Car c = new Car();c.show();
Car c2 = new Car();
}
}
class Car{
//静态代码块
//1,在类第一次加载时就加载到内存中并一直驻存,
//并全局共享,直到类消失静态资源才消失
//2,并且静态资源只被加载一次
static {
System.out.println(1);
}

//构造代码块
{
System.out.println(2);
}

// 构造方法
public Car() {
System.out.println(3);
}

public void show() {
// 局部代码块
{
System.out.println(6);
}
System.out.println(4);
System.out.println(5);
}
}

13.final关键字

概念:
java关键字
final最终的意思
final用来修饰类,方法,成员变量

特点:
被final修饰的变量不可以改变
被final修饰的方法不能被重写
被fianl修饰的类不能被继承

14.多态

概念:
多态指依法实体具有多种形式,是OOP的一个重要特性
主要是指向同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态
好处是可以把不同的子类对象都可以当做父类看待,可以屏蔽不同子类对象之间的差异,写出多种通用代码

特点:
多态前提是继承
要有方法的重写
父类引用执行子类对象
多态中,编译看左边,运行看右边

好处:
多态可以让我们不用关系某个对象具体是什么类型,就可以使用该对象的某些方法
提高了程序的拓展性和可维护性

使用特点:
成员变量:使用的父类的
成员方法:由于存在重写现象所有使用的是子类的
静态成员:随着对象而存在,谁调用就返回谁

向上造型和向下造型:
向上造型:子类对象当成父类对象,只能调用父类功能,子类可以实现重写达到功能需要
向下造型:相当于创建一个子类对象,可以用父类也可以用自己的必须采取强制类型转换

15.异常

概念:
用来封装错误的对象。
组成结构:类型,提示,行号(错误类型,提示错误原因,错误行数)
异常处理:
通过try{}catch(){}捕获
通过throw抛出

16.权限修饰符

  1. public:公共的 最大权限 类-任意<br /> protected:受保护的 第二权限 类-子类<br /> default:默认,什么都不写的默认权限 类-包<br /> private:隐私的 最小权限

17.抽象类

概念:
java中定义没有方法体的方法,该方法由其子类来具体的实现,abstract修饰的方法称为抽象方法,被abstract修饰的类我们叫抽象类

特点:
通过java关键字abstract实现
可以修饰方法和类
抽象类可以没有抽象方法,有抽象方法的必须是抽象类
多用于多态中
抽象类不能被实例化
抽象方法由其子类必须实现或者子类也是其抽象类
抽象类也有其构造方法但是本身不能被实例化,继承的子类可以拥有父类的属性
也就是说所谓的构造方法时给子类进行赋值的

18.接口

概念:
接口中的都是抽象方法
通过interface关键字创建接口
可以通过implements让子类实现
可以理解接口是一种特殊的抽象类
接口突破了java单继承的局限性
接口和类之间可以进行多实现
接口是对外暴露的规则,是一套开发规范
接口提高了程序拓展降低耦合性

特点:
接口是没有构造方法的
接口的里成员变量都是常量
当你并没有写相关修饰符时,也是默认添加的
接口里的方法都是抽象方法
当你没有写相关修饰符时,也是默认添加的