数组详解
数组就是同一类型元素数据的有序集合。
- 相同类型的若干个数据
- 按照一定顺序排列的有序组合
- 每个数据称为一个数组元素,每个数组元素可以通过一个下标进行访问。
数组中一个重要的类是Arrays ,它有很多方法。
面向对象编程(OOP)
以类的方式组织代码,以对象的组织(封装)数据。
抽象:把类似的类或方法整理到一起
三大特性:
- 封装:将方法实现后,装起来,开放一个接口被其他需要的地方调用。
- 继承:继承某个父类方法,并实现它的方法。
- 多态:执行同一个方法,得到的结果或类型是不同的,多种状态。
Class 为类
方法的定义:
修饰符 返回值类型 方法名称(参数类型 形参){ 方法体}
break :出循环,结束循环
return :返回结果
静态方法和非静态方法
-
静态static 方法调用其他类中的静态方法,可以直接调用
public static void main(String[] args){ Study.Yingyuke();//Study是其他类,Yingyuke是方法 }
-
静态方法static 方法调用其他类中的非静态方法,必须先进行实例化,级 new
public static void main(String[] args){ new Study().Yingyuke();//Study是其他类,Yingyuke是方法 }
-
被static 修饰的方法,类加载了,static方法就被加载了,非static方法只有被实例化后才被加载。
程序启动后用static修饰的方法就会被加载,被其他方法直接调用,不用再被实例化(new)才能使用。
值传递和引用传递
值传入方法后,值是不会变得。//值传递(他是具体的东西)
引用类型传入方法后,值会改变。//引用传递(他是抽象的,并不是具体的什么东西)
、、类是抽象的,需要被实例化,实例化后可以有一个自己的对象了。这个对象就是一个具体的实例。抽象就好比是一个模板。
构造器(构造方法)
一个类中即使什么都不写,默认也会有一个空的构造方法,无参构造器。和类名相同,没有返回值。
作用:
- new一个方法的时候本质是在调用构造器。
- 用来初始化值。
- 类中定义有参构造,必须定义无参构造。
创建对象内存分析
-
方法区:方法被加载到这。
-
main方法执行,在“栈”中创建了一个引用变量(new出来的变量 dog);
-
dog 的具体实现内容在“堆”中创建,计算、、等操作;
(1)栈:主要是一些方法或是对象的引用名;
(2)堆:是具体操作的过程
小结1
- 类是一个模板(抽象的),对象是一个具体的实例(具体的);
- 方法:定义,调用
- 对象的引用:引用类型–基本数据类型(8种);对象是通过引用来进行操作的。
- 属性(字段/变量):默认初始化:修饰符 属性类型 属性名 = 属性值
- 对象的创建和使用:
- 必须使用new 关键字构造对象,构造器 P p = new P();
- 对象的属性调用 p.name
- 对象的方法调用 p.eat()
- 类:静态的属性,动态的行为
三大特性
-
封装:提高程序的安全性,保护数据,隐藏代码实现细节,统一接口,维护性更高;具体的实现和类型都用私有的进行定义,不被外部发现。
把具体实现包装起来(高内聚、低耦合),只留给一个调用的接口。封装多对于属性而言,操作属性都需要通过public的get/set进行数据操作。
属性私有化
-
继承 关键字:extends 说明:子类是父类的扩展
-
Java只能是单继承,默认或直接的所有类都会继承Object类
-
super 和 this
public class aa extends bb{ private name = "zhegeren"; public void test(String name){ name //调用test方法传入的参数值 this.name //当前这个类中定义的name参数值 super.name //来自继承父类bb中定义的name参数值 } }
super 调用父类的构造方法,必须是构造方法的第一个;
super 必须只能出现在子类的方法或构造方法中;
super和this 不能同时出现在构造方法中;
- this 本身调用这个对象
- super 代表父类对象的应用,只能有继承时才能使用
- this() 本类的构造
- super() 父类的构造
-
-
方法的重写,和重载是不同的
需要有继承关系,子类重写父类的方法
参数列表必须相同
修饰符:范围可以扩大不能缩小
抛出异常:可以缩小范围,不能扩大范围
重写,子类的方法和父类必须要一致,方法体可以不同;
父类的功能,子类不一定需要,或者不一定满足。
子类没有重写,就调用父类的方法,子类重写了父类方法就会调用子类的。,前提是都new的子类,但是属性类型是父类。
-
多态:动态编译(类型)可扩展性
多态是方法的多态,属性没有多态
父类和子类有联系,同类型的 ClassCastException 类型转换异常
存在条件,继承关系,方法需要重写;父类引用指向子类对象
static方法属于类,他不属于实例,不能被重写
final 常量不能被重写
private 修饰的不能被重写
-
instanceof 和 类型转换
-
person instanceof Object //true 前面的是否是后面的子类
-
父子类,低转高可以直接转换,高转低需要强制类型转换
父类引用指向子类的对象
把子类转换为父类,向上转换
把父类转换子类,向下转换,强制转换
方便方法的调用,减少重复的代码
-
-
static详解
-
修饰变量,静态变量
-
修饰方法,静态方法
-
静态代码块,类中定义
static { //创建对象时直接加载,只会执行一次 用于赋值 }
-
-
抽象类 abstract 修饰的就是抽象的
它只是一个约束,不能被 new出来,不能实例化,它可以被继承。被继承后重写其方法
这个基本不适用
-
接口 interface 只有规范,自己无法写方法,专业的约束,和实现分离,面向接口开发。
接口中的所有定义其实都是公共抽象的 public abstract
利用接口可以实现多继承
public class UserServiceImol implemetns UserService,RoleService
- 约束
- 定义一些方法,让不同的人实现
- 接口不能被实例化,接口中没有构造方法
- implements可以实现多个接口
- 实现类必须要重写接口的方法
-
内部类,类内部再定义一个类
学习来源,狂神说 点击进入