Java基础(二)

一、面向对象编程

1、面向对象:强调具备具体功能的对象,以类/对象为最小单位,考虑谁来做
类:对一类事物的描述,是抽象、概念上的定义
对象:是实际存在的该类事物的每个个体,因而成为实例
设计类就是设计类的成员,类由属性(成员变量)和行为(成员方法)组成。
2、属性(成员变量) 与 局部变量
不同点:
1)两者定义的位置不一样:属性定义在类的内部,方法的外部,是描述类的变量;局部变量在方法内定义,
2)属性定义之后会有默认初始化值,局部变量没有默认初始化值(固一定要赋值后才能使用)
整形(byte、short、int、long):0
浮点型(float、double):0.0
字符型(char):0(或’\u0000’)
布尔型(boolean):false
引用数据类型(类、数组、接口):null
3)属性可以有权限修饰符
4)两者加载的位置不一样:非static属性加载在堆空间中,局部变量加载在栈中

3、方法(成员方法)
1、方法参数的值传递机制
Java中传递参数的方法只有一种:值传递
1)形参是基本数据类型:将实参基本数据类型变量的"数量值"传递给形参
2)形参是引用数据类型:将实参引用数据类型变量的"地址值"传递给形参
注意:如果传递的参数是基本数据类型,它们(实参)定义的位置在栈中的方法内部,传递参数给调用方法的形参,其作用域是在调用方法的内部,在调用方法内部进行值的修改不会影响原来实参的值。
在这里插入图片描述

二、封装性

1、问题的引入:类的属性一般是内部私有化的,是类内部自己进行调用的,即给内部的方法进行调用,这就需要我们对属性添加约束条件,即给属性添加private,使属性私有化,这就是封装性一点体现
拓展:封装性其实表现在很多地方,当我们的需求是是方法或属性只让类的内部使用就可以添加private将其封装,构造器也可以进行封装(如单例模式)

综上:封装性的思想就是将该私有的私有,该暴露的暴露,故封装性需要权限修饰符来配合,一般使用private

2、四种权限修饰符:(由小到大) private 、 缺省 、 protected、 public
1)其可以修饰属性,方法、构造器、内部类
2)修饰类的话只能使用public 、 缺省
在这里插入图片描述

三、构造器

1、作用:
1) 创建对象
2) 初始化对象
2、 每个类都会有一个隐式无参构造器,当我们显示定义一个构造器,系统就不再提供空参构造器。故:
3、this关键字
1)this可以理解为当前对象,一般我们都会省略this,除了当方法的参数和属性的同名时必须显示的使用this
2)在创建对象的时候使用this表示正创建的对象
3)this调用构造器,使用这种方式一般是减少代码的冗余,因为一个类中有多个构造器,每个构造器内部执行的方法相同时,可以从一个构造器调用另一个构造器【通过this(形参列表)】
注意:不要循环调用,类中有n个构造器,则最多有n-1个构造器使用this();this()必须使用在构造器的首行

四、继承性

1、继承性的好处
1)减少了代码的冗余,提高了代码的复用性
2)便于功能的扩展
3)为之后的多态提供了前提
2、继承的格式:通过在类定义处添加 extend 关键字继承一个类
父类也可以叫做超类或基类
子类叫做派生类
3、继承的体现: 一旦子类继承了父类,子类中就获取了父类中声明所有的方法和属性
特别的,父类中声明为private的属性或方法,子类继承父类以后,任然认为获取类父类中私有的结构。
只是因为封装性的影响,使得子类不能直接调用父类的结构而已
4、子类可以定义自己特有的属性和方法,实现功能的扩展(从某种意义来讲,子类的功能性比父类强)
5、继承性的一些规定:
1)Java只支持单继承,即一个类只能继承一个类,但是一个类可以被多个类继承
2)多层继承,即子父类是相对的概念。
6、Object是所有类的间接父类或直接父类(祖先类)

五、方法的重写(OverWrite)

1、子类继承父类后,对父类中同名同参数的方法进行覆盖即为重写
2、重写的规定:1)子类重写的方法的形参列表与父类被重写的方法名和形参列表相同
				2)子类重写的方法的权限修饰符不能小于父类被重写的方法的权限修饰符(因为重写是覆盖)特殊情况:子类不能重写父类声明为private的方法
3、返回值类型
	1)父类方法返回类型为void,子类重写该方法的返回值类型也只能为void
	2)父类方法返回类型为A类型,子类重写该方法的返回值类型可以是A类型或A的子类
	3)父类方法返回值类型为基本数据类型,则子类重写该方法只能是相同的基本数据类型
4、子类重写的方法抛出的类型不大于父类被重写方法抛出的类型

	区别重载和重写:
	
super关键字:当子类的方法重写了父类的方法,却需要调用父类的方法,即可用super()调用父类的方法(父类的属性、方法、构造器都可以通过super调用)
特别的:当我们类的构造器没有写this()和super(),构造器默认会提供super(),调用父类的空参构造器

六、多态性

1、多态性的理解: 一个事物的多种形态(父类的对象指向子类的对象)
2、多态的使用,当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法----虚拟调用
	特点:编译看左,运行看右
3、多态的使用前提:1)类的继承关系  2)方法的重写
4、对象的多态性,只适用于方法,不适用于属性
5、当我们用多态性创建子类对象,用父类引用该对象是无法获取子类特有的方法的,(因为在编译过程中,看作是父类的类型,所以只能引用父类中的方法和属性;特别注意的是,堆空间中是加载了之类的方法和属性的,只是因为类型的问题导致无法调用)
这就需要用到我们一个关键子 : instanceof 
	该关键字可以实现向下转型,类比与强制类型转换,这种方式转换不当时会出现类型转换异常的现象

七、Object类

Object中定义的方法是通用方法:
	1、equals() 和  == 的区别?
		1)== 的使用: 
		==是一个运算符,它可以使用在基本数据类型和引用类型变量中
			当使用在基本数据类型变量时,比较的是两个变量的值是否相同(比较的两个变量的数据类型不一定要相同,除了boolean)
			当比较的变量是引用数据类型,比较的是两个变量的地址值是否相同
		2)equals()
		equals是一个方法,只能适用于引用数据类型,它比较的是两个对象是否相等,比较的还是两个对象的地址值,作用和==相同
		但是对于String、Data、FIle和包装类对equals方法进行了重写,此时比较的不是两个对象的地址值,而是比较两个对象的属性值是否相同
	2、toString()

八、包装类

包装类是针对八种基本数据类型定义相应的引用类型,为了使基本数据类型也体现面向对象的特点,就把基本数据类型封装成了类,这样基本数据类型也可以调用方法
包装类的使用:
	1、基本数据类型、包装类、String三者之间的相互转换
		1)基本数据类型 --> 包装类	: 调用包装类的构造器
		2)包装类 -->  基本数据类型 :  调用包装类中的 xxxValue() 方法
		3)自动装箱,即基本数据类型可以直接赋给相应的包装类 如: Integer i = 10;
		   自动拆箱,即包装类对象可以直接赋给相应的基本数据类型
		4)基本数据类型、包装类转换成String
			方法一: String str = 10 + "";
			方法二:String.valueOf()
		5) String类型转换成基本数据类型、包装类
			调用要转类型的包装类的方法  例如:parseInt()
	Integer内部定义类一个Integer数组,保存了-128 到 127 的整数,当我们定义这个范围内的数时,可以直接使用数组中的元素,不用再去new

九、static关键字
通过以往的方法,我们这能通过new关键字才能产生对象,对象才能加载到堆空间中,我们才能调用其方法。
但是有时候我们不需要把某个方法给一个特定的对象,即每个对象都有该方法或属性,我们就不需要将这种方法在堆空间每个对象独一份,我们就可以使用static将它放到我们的方法去中。

static可以修饰:属性、方法、代码块、内部类
变量按是否有static修饰,分为静态变量 和 非静态变量(实例变量)
	实例变量:我们创建了类的多个对象,每个对象都独立拥有一套类中的非静态属性,当修改非静态变量时不会导致其他对象中相同的属性值
	静态变量:我们创建了类的多个对象,多个对象共享同一个静态变量,当通过某个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过的

静态变量的其他特点
	1)静态变量是随者类的加载而加载的,所以可以通过类名调用该静态变量
	2)静态变量的加载早于对象的创建
	3)由于类只加载一次,固静态变量也只会有一份,存在方法区的静态域中
	
			实例变量		静态变量
	类 		no				yes
	对象	yes				yes
	
静态方法,使用static修饰的方法,和静态变量一样,随着类的加载而加载

static注意点: 
	静态方法中不能使用this、super关键字,从生命周期去理解

什么时候去使用static:可以被共享的属性,不随着对象的不同而不同的可以定义为static
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值