面向对象1.面向对象的思想: (1)概述:面向对象是相对于面向过程而言的。面向过程强调功能,面向对象强调将功能封装成对象,强调对象具有功能; (2))思想特点:A:是符合人们思维习惯的思想; B:将复杂的事情简单化; C:将程序员从执行者变成指挥者;例如,如果我想要实现某个结果,我会寻找可以帮助我实现这个结果的函数的对象。比如说,我要洗衣服,我就会买一台洗衣机,我不在乎怎么洗。 (3)特点: 封装性:隐藏对象的属性和实现细节,只对外提供公共访问。当相同的属性和行为存在于超过:个类中时,这些内容被提取到单个类中,这样多个类就不需要定义这些属性和行为,只需从该类继承即可。多态性: 一个对象代表程序不同运行时间的多种状态。父类或接口的引用指向子类对象。
2、类和对象: 类:对现实世界中某一类事物的描述,是一种抽象的、概念性的定义。对象:事物的具体实体。 3:成员变量和局部变量的区别(重点) (1)作用域成员变量:对整个类有效。局部变量:只在一定范围内有效。 (一般指方法、语句体) (2)存储位置成员变量:随对象的创建而存在,随对象的消失而消失,存储在堆内存中。局部变量:在调用方法或执行语句时存在,存储在堆栈内存中。当方法被调用或者语句结束时,会自动释放。 (3)初始值成员变量:具有默认的初始值。局部变量:没有默认初始值,使用前必须赋值。
4. 匿名对象(1) 匿名对象是没有名称的对象。是对象的简写形式。 (2) 应用场景A: 仅调用一次类中的方法。 B: 可用作方法传输中的实际参数。 5、封装:指隐藏对象的属性和实现细节,只对外提供公共访问;如电脑机箱、笔记本等。 好处:隔离变更;方便使用;提高可重用性;提高安全性
6.关键字private:体现在代码中(1)私有含义,权限修饰符(2)用于修改成员变量和成员函数(3)用private修饰的成员只在本类中有效(4)私有性是封装性的表现7、构造函数方法: (1)特点:方法名与类名相同,无返回类型,无返回值(2)作用:构造函数用于创建对象并初始化、赋值。相应的构造函数一创建就会自动调用。 (3) 构造函数方法注意事项:A: 如果自定义类没有构造函数,系统会默认提供无参构造函数。 B: 如果自定义类提供构造函数,系统将不再提供无参数构造函数。这时候就不能使用无参构造函数了。如果要使用它,则必须手动提供无参构造函数。建议:一般情况下,我们的自定义类必须手动提供无参构造函数。 (4) 构造函数方法与成员方法的区别A: 格式区别:构造函数方法与类同名,并且没有返回类型,也没有返回值。普通成员方法可以任意命名,必须有返回类型,也可以没有返回值。 B: 函数差异构造函数用于创建对象并初始化值。普通成员方法用于完成特定的功能。 C: 创建对象时调用差异构造函数方法。当一个对象被创建时,相应的构造函数只被调用一次。普通成员方法由创建的对象调用,可以多次调用。
8、构造代码块:(1)功能:初始化对象,对象创建后立即执行,优先于构造函数的执行(2)构造代码块与构造函数的区别:构造代码块是所有不同对象的共性。统一的初始化构造函数就是初始化对应的对象。 9. this 关键字(1) this 关键字表示对该类型对象的引用。谁调用this所在的方法,this就代表谁(2)这个使用场景A: 用于区分同名的成员变量和局部变量; B: 定义函数时,调用函数的对象在函数内部使用。因为此时对象还没有建立,所以this代表的是这个对象。 B: 构造函数之间的调用** this 此时,this(参数)必须作为第一条语句存在。 10. Person p=new Person(); 是什么意思?做在记忆里。 (1) 将Person.class文件加载到内存中。 (2)如果p是在main方法中定义的,那么就会在栈空间中开辟一个变量空间p。 (3) 为堆内存中的对象分配空间。 (4)默认初始化对象中的成员。 (5) 显示对象中成员的初始化。 (6) 调用构造代码块来初始化对象。 (如果没有,则不会执行) (7) 调用构造函数方法初始化对象。对象已初始化。 (8)将对象的内存地址赋给p变量,让p变量指向该对象。
11、static关键字:(1)静态含义,用于修改成员变量和成员函数(2)静态特性:随着类的加载而加载,优先于对象的存在。它被所有对象共享,可以通过类名直接调用(3)静态注意事项A: 静态方法只能访问静态成员为什么:因为静态内容是在类加载时加载的,所以它位于高级内存中。 B: this 和super 关键字不能在静态方法中使用。 C: main 方法为static public static void main(String[] args) public: public 表示最大权限修饰符。 static: 因为jvm调用main方法时,并没有创建对象。只能通过类名来调用。因此main必须修改为static。 void: 由于main方法是jvm调用的,所以不需要返回值。修改为void。 main:main的意思是main,所以jvm就采用了这个名字。它是程序的入口点。 String[]: 字符串数组args: 数组名运行时通过java命令给args数组赋值。格式:java MainTest hello world itcast
(4)静态变量与成员变量的区别A:调用方法静态变量也称为类变量,可以通过类名直接调用。也可以通过对象名称来调用。该变量属于类。成员变量也称为实例变量,只能通过对象名来调用。该变量属于该对象。 B:存储位置静态变量存储在方法区长度的静态区域中。成员变量存储在堆内存中。 C:生命周期静态变量随着类的加载而存在,随着类的消失而消失。生命周期长。成员变量在对象创建时存在,在对象消失时消失。 D:与对象的相关性静态变量是所有对象共享的数据。成员变量是每个对象独有的数据。 (5)静态优缺点优点:将对象的共享数据存放在单独的空间中,以节省内存。不需要存储每个对象的副本,可以直接通过类名调用。缺点:生命周期太长。消失就消失。出现访问。也就是说,static 虽好,但只能访问static。
(6)为什么要用静态? A: 当所有对象共享某些数据时,将此成员变量定义为静态修改。 B: 当方法不访问类中的非静态成员时,可以将该方法定义为静态修饰。静态生命周期比较长,所以一般不推荐使用。 (7) 静态代码块A:只执行一次,并且在main之前执行。 B: 执行顺序静态代码块——构造代码块——构造方法12. 生产API(次重点) API(全拼) :Application Program Interface 应用程序编程接口。 (1) 课堂内容需要记录下来。 (2)使用JDK\bin目录下的javadoc工具。格式:javadoc -d 目录-author -version ArrayTool.java13。单例设计模式: (1)设计模式:解决某类问题的有效方法。它是一种思想和规则的总结(2)用于保证某个类在内存中只有一个对象(3)保证唯一性的思想和步骤**为了防止其他程序创建该类的对象,首先禁止其他程序创建该类的对象,即将构造函数私有化**,以便其他程序可以访问该类型的对象,必须在该类中创建该类型的私有对象**,才能为了方便其他程序访问该类型的对象,可以对外提供一个公共的访问方法。例如,API中的Runtime类就是单例设计模式。 (4)单例设计模式A:饿汉式的两种方式加载类时,就创建对象。
class Student { private Student(){} private static Final Student s=new Student();公共静态学生getInstance() { return s; } }B: 惰性样式仅在使用对象时创建对象。
class Student { private Student(){} private static final Student s=null; public static Student getInstance() { if(s==null) { //线程1进来,线程2进来。 s=new Student();返回s;饿汉式和懒汉式**是指类一加载到内存就创建对象;懒汉式是指当类加载到内存中时,对象还不存在。仅当调用getInstance() 方法时才会创建该对象。 ** 懒惰风格就是延迟加载。如果多个线程同时操作lazy风格,可能会出现线程安全问题。要解决线程安全问题,可以添加同步来解决。但加入同步后,每次都要比较锁,效率变慢。因此可以添加双重判断来提高程序效率。注:常用的饿汉式是因为饿汉式简单、安全而开发出来的。使用惰性多线程时很容易出现问题。 Math类的使用(要点) (1)数学运算类: 该类没有构造函数,且方法都是静态的(2)掌握内容A:成员变量**E:比任何其他值都更接近double值e(即自然对数的底)。 **PI:比任何其他值更接近pi(圆的周长与其直径的比率)的双精度值。 B: 成员方法**static double abs(double a) 返回double 值的绝对值。返回绝对值**static double ceil(double a) 返回大于或等于参数且等于整数的最小(最接近负无穷大)双精度值。 **static double Floor(double a) 返回小于或等于参数且等于整数的最大(最接近正无穷大)双精度值。 **max:返回两个值中较大的一个**min:返回两个值中较小的一个**static long round(double a) 返回最接近参数的long。 static int round(float a) 返回最接近参数的int。 **static double random() 返回一个带正号的double 值,大于等于0.0 且小于1.0。 **static double pow(double a, double b) 返回第一个参数的第二个参数次幂的值。 **static double sqrt(double a) 返回正确舍入的双精度值的正平方根。
15、Random类的使用(要点) (1)生成随机数的类(2)掌握内容A:构造方法**Random()创建一个新的随机数生成器。 **随机(长种子)使用单个长种子创建新的随机数生成器。 B: 成员方法**int nextInt() 返回下一个伪随机数,该伪随机数是此随机数生成器序列中均匀分布的int 值。 **int nextInt(int n) 返回一个伪随机数,它是从该随机数生成器序列中获取的0(含)和指定值(不包括)之间均匀分布的int 值。 16、Scanner类的使用(1)可以从键盘获取输入数据(2)掌握内容构造方法:Scanner(InputStream源码)构造一个新的Scanner,它生成的值是从指定的输入中扫描的溪流。例如: Scanner sc=new Scanner(http://System.in);方法总结sc.nextInt();获取整数数据sc.nextLine();获取字符串数据
17、继承(要点) (1)提取多个类的相同特征和行为,用一个类来描述。让多个类与这个类有关系。在这种情况下,多个类可以节省大量代码。这种关系就是继承关系。在java中,用extends关键字来表示。 (2)继承的架构有超过:个具体对象,共享内容不断向上提取,最终形成一个系统。这种制度被称为继承制度。 B:继承体系学习和使用原理**学习顶级内容。因为它是整个系统的公共内容。 **创建子类以供使用。也就是说,使用底层的具体对象。 (3)继承的特点:A:java只能有单继承,不能有多重继承。 B:java可以有多层(层)继承。 (4)继承的好处:继承的出现提高了代码的复用性。继承的出现,建立了类之间的关系,为多态性提供了前提。 (5) 子类和父类中的成员关系A: 成员变量在子类方法中使用变量时: 首先在方法的局部变量中查找该变量,如果存在则使用它。否则,查找此类中的成员变量并使用它们(如果存在)。否则,查找父类中的成员变量,如果存在则使用它们。否则报错。 B: 将方法与子类对象一起使用时的成员方法。首先在子类中查找这个方法,如果存在就使用它。否则,在父类中查找此方法并使用它(如果可用)。否则报错。