Java(面向对象)基础

Java面向对象


**面向对象三大特征:**
继承
封装
多态
 

OOA(面向对象的分析)
OOD(面向对象的设计)
OOP(面向对象的编程)

类==属性+方法
属性来源于类的状态,方法来源于动作
**类的定义**
public class Student{
int id;            //成员变量
// id是对象级别的,必须先有对象才能访问;不能直接使用类访问
String name;
boolean sex;
String adress;
}
创建对象
java中所有new出来的数据统一被储存在堆中,程序猿无法对堆区数据直接操作,只能通过内存地址间接操作
成员变量在堆中的对象中存储

/*
关于系统默认值
基本数据类型
byte,short,int , long     0
float , double     0.0
boolean false
char  \u0000
引用数据类型:null
*/
 面向对象的封装性指的是:
1.属性私有化
2.对外提供公开的setter    getter
set get 方法的方法名必须应该遵循规范

**构造函数(构造方法,构造器,Constructor)**


1.构造方法语句:
【修饰符列表】构造方法名(形式参数列表){
方法体;
}
2.构造方法的方法名必须和类名一致
3.构造方法的作用?
第一,创建对象
第二,给成员变量赋值(初始化成员变量)

4.构造方法应该如何调用?
new  构造方法名(实参);在堆中开辟空间储存对象
5.如果一个类没有提供任何构造方法,系统默认提供无参数构造方法
如果一个类已经手动的提供了构造方法,那么系统不会再提供任何构造方法
6.成员变量到底什么时候赋值?
只有在调用构造方法的时候,才给成员变量赋值

构造方法和普通方法一样可以重载,构造方法不具有任何返回值类型,即没有返回值,不能有void
对象没有更多的引用指向,则变成垃圾

**this关键字**
1.this是什么?
this是一个引用类型
在堆中的每一个java对象上都有this
this保存内存地址指向自身
2.this能用在哪些地方?
第一,this可以用在成员方法中
第二,this可以用在构造方法中
语法:this(实参);
通过一个构造方法去调用另一个构造方法
目的:代码重用;
this(实参);必须出现在构造方法中的第一行
this可以区分成员变量和局部变量
this不能用在静态方法中
静态方法的执行根本不需要Java对象的存在,直接使用类名.的方式访问
而this代表的是当前对象,所以静态方法中根本没有this
**static关键字**
1.static修饰的变量叫“静态变量”
2.static修饰的方法叫“静态方法”
3.static还可以定义静态语句块
static定义的静态语句块在类加载阶段执行,并且只执行一次,是自上而下的顺序的执行
关于实例语句块
每一次调用构造方法之前会执行一次
实例语句块执行顺序也是自上而下
   
一般情况下工具类中的方法大部分都是静态方法
静态方法不用创建对象也能直接访问该方法 
空的引用去访问成员的时候会出现空指针异常
静态方法可以使用“类名.”方式调

用,也可以使用“引用.”,即使用的是“引用.”,底层还是用的“类名.”


**什么时候变量声明成静态变量?**
如果这个属性所有的对象都有,并且这个属性的值是相同的,则该属性声明成静态的属性
静态变量:在类的加载阶段赋值,并且只赋值一次
成员变量:在创建对象的时候复赋值 

**单利模式要领:**
1.构造方法私有化
2.对外提供一个公开的静态的获取当前类型对象方法
3.提供一个当前类型的静态变量  

**类的继承**
引用类的最基本的作用的是:代码重用
语法:
【修饰符列表】class子类名 extends  父类名{
类体
}
Java中,;类于类只能单继承
一个类如果没有显示继承其他类,则类默认继承Object,
Object是Java中的根类

Java语言中子类继承父类,会将父类中所有的数据全部继承,包括私有的,
但是在子类中无法直接访问父类中的私有的数据,但可以间接访问
注意:构造方法无法被子类继承

**方法的覆盖**
1.什么时侯方法需要重写?
      如果父类中的方法已经无法满足当前子类的业务的需求,需要将父类中的方法进行重写
2.子类如果重写父类中的方法之后,子类对象一定调用的是重写之后的方法
3.发生方法覆盖的条件:
第一;发生在具有继承关系的两个类之间
第二;必须具有相同的方法名;相同的返回值类型;相同的参数列表
第三;重写的方法不能比被重写的方法拥有更低的访问权限 
第四;重写的方法不能比被重写的方法抛出更宽泛的异常(异常机制)
第五;私有的方法不能被覆盖
第六;构造方法无法被覆盖,因为构造方法不能被继承
第七;静态的方法不存在覆盖
第八;覆盖指的是成员方法,和成员变量无关
4.继承最基本的作用:代码重写;
   继承最重要的作用:方法可以重写

 **多态**
Java中向上转型和向下转型
1.向上转型(upcasting);子---------》父、
2.向下转型(downcasting);父-------》子;
注意:无论是向上转型还是向下转型,两个类之间必须要有继承关系
多态的作用:
1.使用多态可以使代码的耦合度降低
2.项目的扩展能力增强


super关键字
1.super不是引用类型,super中储存的不是内存地址,super指向的不是父类对象
2.super代表的是当前子类对象中的父类型特征
3.什么时候使用super?
子类和父类中都有某个数据,如果要在子类中访问父类中的属性,需要使用super
4.super可以用在什么地方?
第一;super可以用在成员方法中,不能用在静态方法中
第二;super可以用在构造方法中

super在构造方法中;
语法;super(实参);
作用;通过子类的构造方法去调用父类的构造方法;
语法规则;一个构造方法第一行如果没有this();也没有显示的去调用super();
系统会默认调用super();
super的调用只能放在构造方法的第一行;不能和this共存
super()调用了父类中的构造方法,但是不会创建父类对象

单例模式缺点:无法被继承
1.构造方法私有化
final关键字  
1.final修饰的类无法被继承
2.                 方法
 3.final修饰的局部变量,一旦被赋值,不可被改变
4.final修饰的成员变量必须手动初始化
5.final 修饰的成员变量一般和static联用

**抽象类**
1. 如何定义抽象类?
class关键字前加abstract
2.抽象类无法被实例化
抽象类无法创建对象
3.虽然抽象类没有办法实例化,但是抽象类也有构造方法,该构造方法是给子类创建对象用的
4.抽象类中可以定义抽象方法
抽象方法的语法:在方法的修饰符列表中添加abstract关键字,并且抽象方法应该以 “ ; ”结束,不能带有“{  }”
例如;public abstract void  m1();
5.抽象类中不一定有抽象方法,但是抽象方法必须出现在抽象类中;
6.一个非抽象的类继承抽象类,必须将抽象类中的抽象方法覆盖,实现,重写
抽象类不能被final修饰
抽象方法不能被final修饰

final修饰的引用类型,该引用不可再重新指向其他的Java对象
但是final修饰的引用,该引用指向的对象的属性是可以修改的
 

猜你喜欢

转载自blog.csdn.net/qq_43756675/article/details/95306327