面向对象的思想:
面向对象区别于面向过程而存在的,在早期的编程语言中,我们是先固定功能,然后根据功能来编写代码,每一个功能对应一段代码,这段代码只能完成本功能
这样做的方式及其繁琐,代码量太大了,而且检查代码会消耗巨大的时间,为了提高效率,人们将一些可以重复使用的代码提取出来,封装成一个方法,这样就达到了重复使用的目的
再后来,我们将一些性质相近的方法放到一起,就出现了一个类,我们将可以完成一系列功能的类称之为对象
所谓对象就是具有一定功能的独立个体,不在局限于完成固定功能,不在局限于代码的实现,以创造具备某些功能的个体,让这些个体去完成我们的指令为编程方式,这就是面向对象的思想
特点:更符合人类的思想习惯,将复杂的事情简单化,将我们从执行者变成了指挥者;是不断创造对象,指挥对象去做事情---面向对象编程的设计其实就是在管理和维护对象之间的关系
面向对象的特点:封装继承多态
2.对象
定义:在java中,我们想要使用定义的类来做工作,就必须先将这个类激活;激活之后的类叫做对象,一个类可有多个对应的对象,就像是拿图纸造出来的实物
格式:通过new关键字来创建对象;调用的时候通过对象名来调用----对象名.变量名---对象名.方法名();
对象中属性的值:定义类的时候,如果类中的属性有值,创建对象中的属性也会是这个值,如果类中的属性没有具体值,创建对象中的属性会有一个默认值,一般来说,类描述的应该是一类事物,而不是简简单单是一个具体的事物
三/对象和类的内存
1.存储位置:类存储域内存中的方法区内,只有一份;new出来的对象存储于内存中的堆内存中,同一个类的对象可以有多个
2.使用问题:类无法直接使用,是一个骨架,图纸;而对象可以使用其中的成员,是活的具体实物
3.引用方法:一个对象名引用一个实例对象---多个对象名引用不同的实例对象,多个对象名引用相同的实例对象
四/成员变量和局部变量
1.定义:
成员变量属于类或对象,使用对象名可以直接调用
局部变量属于方法,对象无法直接调用,只能在运行方法的时候运行
2.区别:
在类中的位置不同:成员变量在类中,方法外,局部变量定义在方法中或者方法声明上
在内存中的位置不同:成员变量在堆内存(成员变量属于对象,对象进堆内存);局部变量在栈内存(局部变量属于方法,方法进栈内存)
生命周期不同:成员变量随着对象的创建而存在,随着对象消失而消亡;局部变量随着方法调用而存在,随着方法的结束而消亡
初始化值不同:成员变量有默认值,是在对象创建的过程总jvm设置的默认值;局部变量没有默认值,必须在使用之前赋值
五/匿名对象
没有名字的对象,当前方法内,对象只使用一次的情况
六/private关键字
1.定义:是一个权限修饰符,可以修饰成员变量和成员方法.被其修饰的成员只能在本类中使用
2.作用:限定使用范围,禁止别人调用类的成员,保证数据的安全性,可以通过方法中的代码对有害数据进行过滤
javabean
类中的属性全部私有化,通过getter和setter方法进行设置,通过tostring方法用来描述对象,javabean主要作用是运送数据
七/this关键字
1.定义,代表本类对象的引用,用来区分重名的成员变量和局部变量
2.注意事项:只能在本类方法中使用,本类的静态方法中无法使用,当我们创建对象并调用对象的方法时,方法中如果出现了this,指的就是当前创建的这个对象;本类对象中的方法调用本类的其他方法时,其实被调用的方法的前面就有一个省略的this
总结:
1.面向对象:
java的程序一般是运行在多工环境中(同一时间有很多人使用)
为了保证代码和数据的安全性,每个人使用的类必须分开
所以,java中会创建一个模板,用户使用的时候,通过模板创造出每个人专属的对象
所以,java成员每天都在跟对象打交道,砸门称之为面向对象编程
2.类的使用
工具
模板:成员变量和成员方法混合使用,单独使用成员变量的(javabean)
3.对象:根据模板创建的实例,存放在堆内存中.一个类可以创建无数个对象---类名 对象名 = new 类名();
4.成员变量和局部变量
差异性在于书写位置,内存中的位置,声明周期,初始化值
5.匿名对象
没名字的对象,用一次就不用了
6.private关键字:私有化,本类中的其他成员可以使用,别的类无法使用
7.javabean
用来存储运输数据,私有化所以的成员变量,提供所有的getter和setter方法,提供tostring方法
8.this:表示当前对象,那个对象调用这个方法,this代表谁
day8
一.构造方法
1.定义:用户初始化对象,我们在通过new关键字创建对象的时候,必须调用构造方法
2.特点:
方法名和类名相同(大小写也要于类名相同)
没有返回值类型,注意,连void都没有
没有具体的返回值return
构造方法可以是有参的,也可以是无参的
3.注意事项
如果没有写构造方法,那么编译器会自动加一个空参的构造方法,如果已经写了有参的构造方法,编译器就不会在加上空参的构造上了,这个时候如果还想使用空参的构造,那么就需要手动补上空参构造----构造方法必须通过new关键字来调用,不可以使用对象名来调用;构造方法也是成员方法,只是比较特殊而已,所有成员方法的属性构造方法也拥有---创建对象的时候,只能调用一个构造方法,但构造方法内部可以相互调用,本类中的成员方法无法调用构造方法
二/构造方法的重载
1.定义:
和成员方法的重载一样,方法名相同,参数列表不同
需要注意的是,只要是构造方法,方法名一定是相同的,也就是说构造方法的重载只是参数列表不同
2.构造方法相互调用
构造方法可以重载,我们可能会写多个构造方法以应对不同的赋值动作,已经写过的构造方法可以直接调用
使用this(),表示调用本类的构造方法,并且this()必须写在第一行
三/类成员之间的相互调用
1.定义:成员变量一般来说都是为了成员方法服务的;成员方法可以根据成员属性的不同做出不同的应对
四/代码块
1.代码块就是定义一个无名称的代码块,用{}括起来
2.分为局部代码块(方法中),构造代码块(类中方法外),静态代码块(类中方法外),同步代码块(作用域多线程中)
详情:
局部代码块:限定局部变量的成名周期,及早释放,提高内存利用率,在方法中创建一个域,限制变量的作用范围
构造代码块:创建对象时候优先于构造方法执行,多个构造方法中相同的代码存放到构造代码块中,节省代码量
静态代码:给构造代码块加上static关键字就编程了静态代码块,用于类的初始化,在类加载的时候就执行,并且只在类加载的时候执行一次,一般用于加载驱动
五/静态
1.定义
用于修饰类的成员,表示静态;一旦被修饰,类的成员将不再属于这个类创建的对象
2.特点:
随着类的加载而加载,优先于对象存在,被类的所有对象共享,通过类名调用,优先于类的其他成员,类的所有静态成员都存储于静态方法区
初始化顺序:静态成员变量--静态代码块--成员变量--构造代码块--构造方法;
静态成员变量和静态代码块谁写在前面谁先执行
六/静态的使用
1.定义:通过对静态的了解,存放于方法区之中,属于类,我们也称之为类成员----多用于工具类的方法或者频繁需要调用的方法---当一个属性或方法被所有的对象共享的时候
2.使用格式: 类名.成员变量名 / 类名.方法名()
3.注意事项:
静态的成员在内存中只有一份
所有的操作指向的都是同一个静态成员
可以使用对象名调用,但是不推荐
静态可以极大的提升运行的效率
静态随着类的存在而存在,随着类的消亡而消亡,jvm不关闭,静态就一直存在,太多的话,容易溢出
七/静态和非静态
1.this关键字的问题
静态方法中无法使用this关键字,因为静态方法调用的时候,不需要对象;非静态方法中可以使用this关键字,因为非静态方法在调用的时候必须要有对象
2.访问成员变量
静态方法只能访问静态的成员变量,如果要使用非静态的成员变量,必须先创建对象
非静态的方法可以直接访问静态的成员变量,也可以直接访问非静态的成员变量
3.访问成员方法
静态方法只能访问静态方法,如果想使用就必须要创建对象
非静态方法可以直接访问静态方法,也可以直接访问费静态方法
(静态只能访问静态1)直接调用
八/main方法详解
1.格式:public static void main (String[] args){}
2.详解:
public被jvm调用,访问权限足够大
static被jvm调用,不用创建对象,直接类名访问
void被jvm调用,不需要给jvm返回值
main一个通用的名称,虽然不是关键字,但是被jvm识别
String[] args 以前用于接收键盘录入的arguments
day9
一/单例模式
1.定义
单例也叫单态模式,是设计模式中最简单的一种,当一个类被创建之后,只能产生一个实例供外部访问,并且提供一个全局访问的方法
单例的最终目的就是保证一个类在内存中只能有一个实例对象
java频繁创建和销毁对象都会占用一部分系统资源,使用单例模式可以提高性能
单例模式创建的对象不会被回收,过多的单例容易造成溢出
2.创建过程
私有化构造方法(使用private修饰)
在其内部产生该类的实例化对象,并将其封装成private static 类型
定义一个静态的方法返回该类的实例
分为饿汉式和懒汉式,饿汉式是上来直接创建对象,懒汉式是提供接口的时候,再创建对象
3.注意事项
单例模式总共有七种基本写法
我们现阶段写的都是线程不安全
4.应用场景
适用于全局只需要一个的情况下,比如Windows系统的任务管理器,java中的日历类
二/继承
1.定义:
从生活中的理解,我们可以明白,继承就是从前辈手里获取一些好处;编程语言中的继承是指让类与类之间产生关系,子父类关系
2.优缺点
优点:就是为了获取父类中的方法和属性---提高代码的复用性和维护性---让类和类之间产生关系,是多态的前提
缺点:类的耦合性增强了,我们开发的原则是高内聚低耦合---耦合指的是类与类的关系,内聚就是独立完成工作的能力
三/继承中的注意事项
1.this和super关键字
this代表本类对象,super代表父类对象,this.成员 调用本对象中的成员,也可以调用父类中的成员(当子类中没有的时候)---super.成员 调用父类的成员 this(...)调用本对象的构造方法 ---super(...)调用父对象的构造方法
2.继承中构造方法的关系
子类中的所有构造方法都会默认访问父类中的无参构造方法
因为类继承父类中的数据,可能还会使用父类中的数据,所以子类在初始化的时候需要将父类先初始化
每一个子类构造方法的第一条语句默认都是:super(),object类最顶层的父类
当父类中没有空参构造的时候,子类会报错,这时我们可以采用调用父类的有参构造,并附上默认值
3.继承中成员的关系
子类无法使用父类私有的成员
如果子父类出现了一样的成员变量,采用就近原则
4.继承中的初始化顺序
静态优先,父类优先,成员变量---构造代码块---构造方法
5其他注意事项:
使用时,尽量使用最底层的子类,最底层的子类的功能是最全的
如果要查看这个体系中共性的功能,就去查看顶层的父类
不要为了继承而继承
三/方法重写(overriding)
1.定义
子父类中出现了一模一样的方法
重写是一种现象,也是一个动作
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写方法,这样,既延续了父类的功能,又定义了子类特有的内容
2.重写的意义
首先,我们定义的方法本体和父类中的方法是一样的,只是我们实现更加先进而已
别人已经熟悉了父类中的这个方法,如果子类出现同样的方法会提高使用者的辨识度,同时又能让使用者用上新的功能,这是版本升级所需要的的
四/重写的注意事项
1.私有方法
父类中私有方法不能被重写,因为父类私有方法子类根本无法继承
2.权限
子类重写父类方法时,访问权限不能更低,最好保持一致
3.静态方法
父类的静态方法,子类也必须通过静态方法重写
重写其实是全遮挡,调用者无法在通过任何方式去调用和子类关联的父类对象中的方法
但是静态无法做到全遮挡,我们依然可以直接使用父类的方法
五/instance关键字
1.定义
用来判断一个对象是否属于一个类或者此类的父亲
2.用法
对象 instance of 类名
该表达式是一个比较运算符,返回的结果是boolean型,