1.类,对象,包 (1)对象 对象因关注而产生,万物皆对象. a.结构化编程: 面向过程的结构化编程是将整个工程分布式的按照步骤从上到下依次执行。 b.面向对象编程: 面向对象就是在模拟生活中的各种场景. 面向对象:通过对象之间的属性和行为的相互关联来完成特定的功能. 建立对象模型,将问题域化为不同的对象去处理. |-->找对象 ---->创建一个类来描述对象的行为和属性 c.面向对象和面向过程的区别: 面向过程是将整个业务流程分解成若干步骤,最后再按照先后顺序串联起来,程序围绕着问题的本身 来设计; 面向对象要先明确一个对象的行为和属性,程序围绕着问题域中的对象来设计. (2)类 类是对象的抽象,对象是类的实例。 a.类的特征: 在面向对象的编程中,类是一个独立的程序单元,是具有相同属性和行为的一组对象的集合。 在程序中用类来模拟现实中的实体。 其规则有:类首字母大写(驼峰命名法); 文件名必须和public类对应的类名保持一致;一个文件可以定义多个类,但是只有一个public类 类可以看做是模板,产生的实例是对象. 方法:访问修饰符--返回类型--方法名称--参数列表--方法体 b.类的三要素: 1)类的标志--类的一个有别于其他类的必不可少的名字。 2)属性的说明:用来描述相同对象的静态特征, 3)类的方法--相同对象动态的特征(针对对象时就是行为,针对类时就是方法) c.实例化对象 类是抽象出来的概念,对象才是真实存在的实体。 程序中通过类来实例化对象(new) d.this this表示当前类中对象的引用。 创建(new)的是哪个对象,this就表示这个对象的引用 (3)包 对文件的分类和管理-->文件夹 提供了一个组织类的机制,可以表示类的全路径, 包可以用来分辨类,包的命名方式采用公司的网址。com.xxx.包name,并且包名要小写. 包名(com.xxx.xxx)-->位于Java文件的首行,表示当前文件在某个文件夹下 系统包:java.功能.类名--> 命名时尽量不要使用系统使用过的名字 java.lang-基础类/java.util-工具类/java.io-输入输出类 要使用其他包下面的类,使用import来导入,或者:包名.类名(.*) import不能导入本文件所在的类--会提示警告,默认就是导入本类 2.对象的行为 (1)栈,队列 栈是一端受限,一端允许操作的限线表--先进后出. 例:洗碗洗好放到篮子底下的最后才能拿出来 队列是限定性的限线表--先进先出. 例:排队买票,先排队先买票,后排队候买票。 (2)方法调用栈 定义多个方法,互相调用,先执行的方法后结束,后执行的方法先结束. 改变流程控制的方式:方法调用,选择语句,循环语句. (3)重载 方法名相同,参数列表不同 当一个类有两个到多个同名但是有不同参数列表的方法时,就是方法的重载 参数列表:参数的类型,参数的个数,参数的前后位置 重载提高了方法的利用率:相同的行为,不同的表现形式 public class Fuction { public void show() { System.out.println("这是无参方法"); } public void show(int id) { System.out.println("这是有1个int参数的方法"); } public void show(String name) { System.out.println("这是有1个String参数的方法"); } public void show(int id, String name) { System.out.println("这是有2个参数的方法"); } public void show(String name, int id) { System.out.println("这是有2个参数的方法,与上个方法参数位置不同"); } } (4)构造器 与类名一致并且只在实例化时被执行一次的特殊方法 构造器的目的是初始化类的实例,使其成为一个有效的状态. 构造器也是重载的一种表现,创建对象的时候,虚拟机会根据参数列表来决定调用哪个构造方法. 在实例化对象时,若类中没有无参构造,则编译器会自动创建一个默认的无参构造; 若创建了一个有参构造那么编译器就不会再加上默认的无参构造. public class Fuction { public Fuction() { System.out.println("这是无参构造"); } public Fuction(int id, String name, int age) { System.out.println("这是有参构造"); } public int show(int id) { System.out.println("这是普通方法"); return id; } } a-构造函数的作用: 1)创建对象:创建对象的时候必须要有构造,可以初始化一些内容,由虚拟机来调用; 2)对象的初始化:构造函数可以对对象进行初始化,每一个类必须要有构造. b-构造器和普通方法的区别 1)格式不同:构造方法不存在返回值,方法名必须和类型一致;普通方法可以有返回值,名称可以和类名不同,只要符合规范就行; 2)调用的时间不同:构造方法总是在类创建的时候运行;普通方法必须是对象调用时才执行; 3)执行次数不同:一个对象创建后构造方法只在new的时候执行一次;普通函数由对象来调用,调用一次就执行一次 c-构造方法使用的场景: 在分析具体事物的时候,发现事物一出现就具备了某些特征,就可以将其定义在构造中. 3.继承 面向对象的特征:封装,继承,多态,抽象. (1)继承的概念: 在java中继承表示的是类与类之间的关系,是is-a的关系. 除继承外类与类之间还有组合关系has-a. has-a是类之间相互依赖的表现;is-a是继承中子类和父类的关系,它们都可以达到代码的复用. 类是单继承的,一个类只有一个父类. 通过extends关键字实现类的继承.父类(基类)-->子类(派生类) 通过扩展已有的父类/基类,创建一个新的子类/衍生类/派生类. 就可以拥有父类的所有的属性和方法,并且子类还可以扩展父类的属性和方法 public class Doctor extends Peopel { //Doctor是子类,它继承了Peopel类 } (2)方法的重写: 当子类继承父类之后,当子类中的方法和父类方法的方法名一样 参数一样 返回类型一样,就可以称为子类重写了父类的方法.重写之后会优先调用子类的方法. 重写的规则:1.子类方法必须与父类方法的返回值类型 方法名和形式参数一致;2.子类的访问修饰符不可大于父类 3.子类不可抛出比父类更多的异常. 重写与重载的区别:重写是子类方法与父类方法之间关系的体现;重载是一个类当中多个方法之间参数不同的体现. @Override是伪代码,表示当前方法是重写方法: a.可以将@Override看成是注解; b.增强了代码的可读性,该标签可以表示它是一个重写的方法. public class Doctor extends Peopel { @Override public int attack() { int docAtta = super.attack(); return docAtta; } @Override public int defense(int foeAttack) { int docDefen = super.defense(foeAttack); return docDefen; } @Override public void lvUp() { super.lvUp(); } } (3)Object类 Object类是所有类根类,一个类如果没有显式的继承Object,虚拟机都会自动加上extends Object. equals()方法是Objiect类的方法,是用来判断两个对象的引用是否相等. 如果在子类想要判断两个对象的内容是否相等,就需要在子类重写equals方法.子类调用的时候就优先调用重写后的方法; toString: 一个字符串想要和另外一个类型进行连接,toString方法可以将其他类型转换为字符串再进行连接. 如果输入的是对象,默认调用toString并打印:内存地址+hashcode码. 对象-->getclass():类对象;new实例化的对象:类的对象. 类的对象关注的是数据;类对象关注的是属性.