面向对象编程指的是
如何区定义类
* 如何去使用类中的方法和属性
* 直接使用属性的情况非常少因为不安全
* 如何区分方法和属性
* 方法后面必须跟(),属性不用
* 定义类和方法的作用:方便使用和使用更方便
* 面向对象主要是如何定义更好的类从而方便使用
类的定义格式
权限修饰符 类的关键字 类名{}
权限修饰符:4个
private:私有的
默认:不写就是默认
protected:被保护的
public:公开
类的关键字:class
类名
* 必须遵守命名规则
* 必须遵守命名规范
属性
* 位置:在类(class)的{}之中,方法和代码块的{}之外
* 实例属性
* 格式:权限修饰符 数据类型 属性名 = 值
* 类属性
* 格式:权限修饰符 static 数据类型 属性名 = 值
局部变量
必须指定初始化值(赋值)才可以使用 是有时效性的 方法执行完就过期了
位置:
* 1.方法体中即方法的{}之中
* 2.方法形参 public void Numb(int a,int b){}[a和b就是形参 传过来的整数就是实参]int是形参类型 当然也还有其他类型
* 3.代码块之中{}({}这个括号就是代码块)
* 格式:
* 数据类型 变量名;(数据类型 变量名=初始值;(第二种写法))
* 变量名:自己起的最好遵守规范
* 数据类型:两大类
* 基本数据类型:四大类 有8个
* 1.整型:四个 默认为0 默认类型为int
* byte
* short
* int
* long
* 2.字符型:只有一个 默认为‘’
* char
* 3.浮点型:两大类 默认类型为double 默认值0.0
* float
* double
* 4.布尔型:只有一个
* boolean 只有true和false
* 引用数据类型:三大类 无数个 默认值为null
* 类:使用class关键字定义的 例如String
* 数组:使用[]标识
* 接口:使用interface关键字定义的
类的方法
分类
实例方法
* 权限修饰符 返回值类型 方法名(形参列表){方法体}
* 调用:必须通过 实例.方法名(实参)
* 返回值类型
* void:方法不需要强制写return语句
* 数据类型:必须与之有关系的值或变量 如果是基本数据类型,是什么类型就返回相应的类型或变量 如果是引用数据类型,可以返回的是子类的对象或相同类型的值(如果返回值数据类型时一个父类可以返回一个子类对象)
*
类方法
* 权限修饰符 static 返回值类型 方法名(形参列表){方法体}
* 调用:可以通过 实例.方法名(实参)或类名.方法名(实参)
* 构造方法
* 权限修饰符 类名(形参列表){
* super(实参);调用父类中的构造方法
* }
* 作用:当构造对象时 必须要做的事情 可以写在构造方法中
* 每个类都默认有一个无参的构造方法,如果显示定义了一个有参的构造方法,则不再提供默认的构造方法,需要显示的定义无参构造方法
抽象类
抽象是一个不具体的类
关键字:abstract
* 格式:权限修饰符 abstract 返回值类型 方法名(形参列表)
* 作用:可以修饰类(抽象类),方法(抽象方法)
* 用来设计一个没有具体功能的类
注意:
* 抽象类不可以被实例化;{类名 实例名=new 构造方法()}实例化
* 抽象类可以有构造方法,其构造方法主要是被子类来使用
* 抽象类中可以有抽象方法,也可以有实例方法和静态方法
* 抽象方法,不可以被static,final,private等关键字修饰
* 抽象方法必须通过子类重写来使用
* 抽象方法只可能存在于抽象类和接口中
接口
接口使用interface关键词定义,其它与类没有太大差异
* 1.接口中只能存在public abstract修饰方法,就算不写也会默认加上
* 所以接口比抽象类更加抽象
* 2.继承只能单一继承,但是接口可以多实现 implements(实现)
* 3.接口中只能存在常量,不能有其它属性
* 4.在jdk8开始 接口支持使用default关键修饰方法 实现默认功能
多态
一个对象可以有多 本身对象的形态
* 格式:父类 实例名=new 子类构造方法();
重载
* 1.方法名称相同,且形参列表不同
* 2.与返回值类型无关
static:静态关键字
修饰方法:称为类方法或静态方法
如何调用
* 实例.方法() 或 类名.方法()
* 注意类方法只能使用类属性
* 修饰属性
* 称为类属性或静态属性
* 实例.属性名 或 类名.属性名
* 注意:静态属性只有一个公用的内存地址,只需要修改一次,其它对象都会受影响
main方法
格式固定
是程序的入口,表示该类可以被执行
一个项目中可以存在多个类拥有main方法
但是一个类只能有一个main方法
创建实例的格式:类名 实例名(对象)=new 构造方法();
* 类名 实例名(对象)=new 类名();
关于Java的继承
格式
* public class 子类名 extends 父类名
* 1.父类必须先存在
* 2.子类只能继承父类中的非私有的属性和方法 私有(private)
* 3.在同一个包下,子类可以继承父类中的默认属性和方法
* 4.在不同的包下,子类不能继承父类中的默认属性和方法,只能继承被保护的和公开的
方法重写 (继承后子类要重写父类中提供的方法)
重写一定是子类重写父类中的方法
* 1.子类重新定义父类中的同名方法 (要一模一样(简单记忆方法))
* 要遵守java方法重写的规则
* 注意属性是没有重写的
数组的基本使用
* 变量有一个局限性,就是只能保存一个数据。
使用数组和循环来优化
* 保存多个数据就需要使用数组和集合
数组的基本使用
* 1.定义数组
* 1.静态定义 定义和赋值必须在一行
* 左边叫定义 = 右边叫赋值
* 格式:数据类型[] 数组名=new 数据类型[]{值1,值2,值3,.....};
* 简写:数据类型[] 数组名={值1,值2,值3,.....};
* 2.动态定义 可以先定义后赋值
* 格式1:数据类型[] 数组名=new 数据类型[长度];
* 格式2:先定义:数据类型[] 数组名;
* 后赋值:数组名=new 数据类型[长度];
* *这两个的赋值格式:数组名[索引值]=值;
* 2.数组的长度 length属性
* 3.数组的索引
* 从0开始 长度-1结束 [0,length-1]
* 格式 数组名[索引值]=值;
* 如果超越范围,会抛出异常,数组索引越界异常(java.long.ArrayIndexOutOfBoundsException)
* 4.数组的使用及赋值
* 格式 数组名[索引值]=值;
* 注意:数组在使用前一定要先(赋值)初始化,即赋值 否则空指针异常(java.lang.NullPointerException)当一个对象为空的时候你来使用它就是空指针异常
* 5.数组的异常
* 数组索引越界异常 空指针异常
* 6.数组的遍历,使用循环
* 遍历是指从头到尾或者从尾到头,一个个元素的过一遍