Java知识点总结-------1

1:jvm(虚拟机)三种内存区

JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)

1:“方法区”/ “静态区”:存储代码片段 .class文件,类的信息(静态变量)
最先有数据,因为类最先被加载",方法的代码片段存储在方法区中,但方法执行过程中的需要的内存在栈中"
2:"栈:"方法执行 , 就会压栈,(局部变量)
3:"堆:"new出来的对象都在堆中,堆中存储对象,存储this,(实例变量)
垃圾回收(GC机制)主要针对堆 ``

2:成员变量和局部变量

  成员变量:
       1、成员变量定义在类中,在整个类中都可以被访问。

      2、成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。

      3、成员变量有默认初始化值。

  局部变量:

      1、局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。

      2、局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。

      3、局部变量没有默认初始化值 

		在使用变量时需要遵循的原则为:就近原则

		首先在局部范围找,有就使用;接着在成员位置找。

3 封装,继承,多态

1.1:封装

  封装是把对象的所有组成部分组合在一起,封装使用访问控制符将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。适当的封装可以让代码更容易理解和维护,也加强了代码的安全性。

1.2:封装实现2步:

1 属性私有化
2 对外设置set get方法
私有的可以在本类中访问,在其他类中必须使用set和get方法

2继承

2.1继承的作用
		基本作用:子类继承父类,代码可以服用
		主要作用: 有了继承才有后期的方法覆盖和多态机制

2 .2:继承的相关特性
	优点:!!!!!!
		1:B类继承A类    
		  A类称为超类(superclass) ,父类,基类
		  B类称为子类(subclass),派生类,扩展类
		
		2: java只支持单继承,
		
		3: java不支持多继承,但可以间接继承
		
		4: java 中,子类继承父类,除构造方法不能继承之外,其他都可继承。
		   但是私有的属性不能在子类中直接访问,(通过间接的手段来访问,
		   例如 : 可以通过方法来访问私有属性)

		5 :java中的类没有显示继承任何类,则默认继承Object类,
		Object类是java语言提供的根类,

	缺点!!!!!
		耦合度高,父类发生改变会立即影响到子类

3 多态

一:"多态" :父类型引用指向子类型对象	
		包括编译和运行阶段
			编译阶段:绑定父类的方法。 
			运行阶段:动态绑定子类型对象的方法。和底层堆内存的对象有关
		只有先编译了才能看运行	 '
		编译看左,运行看右
		java允许向上转型,也允许向下转型

			1:向上转型
				子--->父 (自动转换类型)
			
			2:向下转型(存在风险) 需要添加强制类型转换符
				父--->子(强制类型转换)
			加if  用'instanceof' (运行阶段动态判断) 运行时的地址
				语法: (引用 instanceof 类型)
				
			注意:向上 向下转型是引用数据类型的称呼
				自动转换类型 和 强制类型转换是基本数据类型的称呼
			
			3 :什么时候向下转型?
					需要调用子类特有的方法
			4 :
				多态的作用:
					降低程序的耦合度,提高程序的扩展力
4 super 和this
1: "this"是一个关键字,保存当前对象的地址,存储于堆中,
	一个对象一个this ,"this."引用+点 
	
2: this只能使用在实例方法,不能使用在静态方法
	因为实例方法是通过"类."访问的
	

3:什么时候定义为实例方法?静态方法?
	如果方法直接访问实例变量,则定义为实例方法
	也就是说  : 访问对象级别的,定义为实例方法
4 :
	什么情况this不能省略?
		实例方法和构造方法时,区分局部变量和实例变量时不能省略
5: this()
	通过当前构造方法中调用另一个本类的构造方法, 并且this()必须在第一行

6:只要负责调用的方法a和被调用的方法b在同一个类中:
		this. / 类名. 可以省略

super

super()
	1:  当一个构造方法第一行:
		没有this()又没有super(),默认会有一个super(),
		表示通过子类的构造方法调用父类的无参数构造方法
			
	2:
		当一个子类方法调用多个父类的构造方法,实际只创建了一个对象
	-----相当于super()把构造方法继承过来了 ,但并不是继承

	3:super(实参)干嘛的???
		初始化当前对象的父类型特征 ,还可以访问父类型的私有属性 
	
	4:super.的用途??
		区分父类和子类 同名属性/变量 时不能省略
		子有,父有,在子类中访问‘父类特征’ 用super.  
		既可以访问属性,也可以访问方法
	
	5:小知识:
		输出'引用.'  会输出引用.的tostring()

	6: super 不是引用。不保存内存地址。不指向任何对象
		super 只是代表当前对象内部的父类型特征的关键字
	
	7 : super 可以出现在实例方法和构造方法,不能使用在静态方法
	
	'切记!!!!!私有方法只能在本类中访问
5 方法覆盖和方法重写

方法重载:

	1: 在同一个类中
	2:	方法名相同
	3:	参数列表不同(个数,顺序,类型)
	4: 与返回值,修饰符列表无关

“方法覆盖”:

		1:当子类对父类继承过来的方法进行"方法覆盖",会执行覆盖后的方法
		
		2 :方法覆盖的规则:
			1:	子类和父类要有继承关系
			2: 返回值相同,方法名相同,参数列表相同
			3:	访问权限不能更低,可以更高(就是修饰符列表权限的排序)
			4:	重写之后的方法不能比之前的方法抛出更多的异常,可以更少
		
		3 : 注意:
			1:方法覆盖只针对于方法,与属性无关

			2:私有方法无法覆盖
				----private修饰只能在本类中使用

			3:方法覆盖不能覆盖构造方法
				-------因为构造方法不能继承

			4:方法覆盖只针对实例方法,静态方法覆盖没有意义
				----因为静态方法跟对象无关,有static限制,调的还是父类的方法
				----调用还得用类名. 调用,类名.调用谁就是谁的方法

			注意:
				'方法覆盖和多态不能分开
			多态要有对象,而静态方法中不含对象,一般不探讨静态方法覆盖
		4 :
			Object中的toString()方法的覆盖
			toString()方法作用:将java中的对象转换成字符串
6 抽象类与接口

抽象类

2.1 :抽象类定义:属于引用数据类型,是一个类,
				      在类名前加 abstract 关键字就行了
	2.2 :抽象了无法实例化,无法创建对象,所以抽象类是用来被子类继承的
	2.3 :final 和 abstract 不能联合使用,是对立的两个关键字
	2.4 :抽象类的子类可以是抽象类,也可以是非抽象类
	2.5 :抽象类无法实例化,但抽象类有构造方法,这个构造方法供子类使用
	2.6 : 抽象类中不一定有抽象方法,抽象方法一定出现在抽象类中
	2.7 : 抽象方法定义 : 在返回值类型前加abstract ,并且方法名括号后加分号';'
	2.8 : 一个非抽象的类继承抽象类,必须把抽象类中的抽象方法实现,
			要对抽象方法进行覆盖/重写/实现

接口的基本语法

3.1 :接口是一种引用数据类型,编译之后生成class文件
	3.2 :接口是完全抽象的
	3.3 :接口怎么定义:
		[修饰符列表] interface 接口名 {}
	3.4 :接口支持多继承
	3.5 :接口中只能有 常量(public static final 可以省略) 
			和 抽象方法(抽象方法的public abstract可以省略)
	3.5 :接口中的方法都是抽象方法,所以接口中的方法不能有方法体
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值