关键字/==&equals/导包/值传递&引用传递

堆区和栈区的区别

栈区:先进后出 存放局部变量 连续的存储空间
堆区:存放new出来的对象,不连续的存储空间

导包

类所在的包  package  包的关键字, 后面跟的是     包名

import 导包的关键字    java.util.Arrays类
import 包名.类名;

一个类中想要使用其他包中的类 都需要导包

包分为两类:
1. java提供好的包
		java.lang 不需要手动导包, java内置了的    Object String 包装类
		java.util  工具
		java.sql	sql相关的包
		java.net    socket   网络
		java.io		BufferedReader  io
		java.awt 	图形工具包
2. 自定义的包
  		com.zx.demo

final关键字

①、final修饰的变量不能改变,即等同于常量,只能赋值一次
(成员变量:在定义时就必须初始化。局部变量:声明时可以不赋值,可以通过构造方法赋值)
②、final修饰的方法不能被子类重写、但是可以继承
③、final修饰的类不能被继承

final  修饰符: 最终的 	
 1. 能修饰什么?
 		成员变量
 		局部变量
 		方法
 		类
 2. 修饰了之后又什么样的特点
 		成员变量: 声明的时候必须赋值,只能赋值一次
 		局部变量: 声明的时候可以不赋值, 只能赋值一次
 		属性:把final修饰的变量 叫做常量        final static int age = 7;  (静态常量)
 		方法: 最终方法, 只能被继承, 不能被重写
 		最终类: 只能自己正常使用, 不能被继承
 3. 什么时候用
 		成员变量: 经常final 和 static 连用,  版本号  ,接口  public static final   
 		方法 : 为了保证原有逻辑
 		最终类: 保证类的原始状态,不能让人修改的时候,类似于String Integer 

什么时候赋值

 正常情况下:
 	1 . 声明final修饰的成员变量的 时候就应该直接赋值
 在特殊情况下: 
 	1. 构造代码块 , 赋值一次, 构造方法理则不可以在赋值
 	2. 直接在构造方法里面赋值, 每一个构造方法里面都必须赋值

final finally finalize区别

final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally 是异常处理语句结构的一部分,表示总是执行
finalize 是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的

一、final :

1、修饰符(关键字) 如果一个类被声明为final,意味着它不能再派生新的子类,
不能作为父类被继承。因此一个类不能既被声明为abstract,又被声明为final的。

2、将变量或方法声明为final,可以保证他们使用中不被改变。
被声明为final的变量必须在声明时给定初值,而以后的引用中只能读取,
不可修改,被声明为final的方法也同样只能使用,不能重写。

二、finally:

在异常处理时提供finally块来执行清楚操作。如果抛出一个异常,
那么相匹配的catch语句就会执行,然后控制就会进入finally块,如果有的话。

三、finalize:

是方法名。java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除之前做必要的清理工作。
这个方法是在垃圾收集器在确定了,被清理对象没有被引用的情况下调用的。
finalize是在Object类中定义的,因此,所有的类都继承了它。子类可以覆盖finalize()方法,
来整理系统资源或者执行其他清理工作。

super、this关键字

this 和super 不能再静态方法或者静态代码块中使用

super

super 指代的是父类的对象 
	super() 调用父类的构造方法, 创建子类对象的时候调用父类构造方法可以将父类的属性和方法加载到子类的堆内存, 子类对象就可以调用父类的属性和方法了
    super() 如果自己不写,程序会自动的添加, 在子类构造方法的第一行
	    super。属性   调用的是父类的属性
	    super。方法   调用父类的方法

this

this 指代是本类对象
	this() 调用的是 奔雷的其他的构造方法, 减少重复代码,提高代码的复用性
	this() 要放在本类构造方法的第一行  
		this。属性   调用的是本类属性,如果本类没有则调用父类属性。  为了解决最小最用于最强原则问题
		this.方法. 调用自己本类的方法, 如果自己本类没有 则调用父类的

访问修饰符

注:类只能被默认和public修饰,一个.java文件。只能有一个类被public修饰,并且这个类名必须和文件名一致

访问修饰符: 4个
	public           	公开的公共的       整个工程  本类   本包 其他包也可用
	protected 			受保护             	本类, 本包, 其他包的子类
	缺省 											本包,本类
	private 			私有					本类

1. 四个访问修饰符能修饰哪些
		类         	public 和缺省
		属性   		四种访问修饰符修饰的  
		方法  		四种访问修饰符修饰的  
2.  修饰的权限

静态

存在方法区

static关键字

只能修饰内部类、方法、属性、代码块
①.非静态的变量属于对象。静态变量属于类。变量用类名调用
②.非静态的变量 new一个对象就有一个值。而静态变量只有一个值
③.非静态的方法和属性可以调用静态的。而静态的不能调用非静态的方法和属性。

static 修饰符
	1. 能修饰哪些?
			属性
			方法
			代码块
	2. 静态属性方法调用方式
			1> 类名。属性和方法
			2> 对象名。属性和方法
     	类加载器将类模板加载到了方法区,并且将静态属性方法  加载到了静态域中
 3. 静态域中的对属性和方法是供所有对象使用的 是共享的
 		只要有一个对象进行了修改, 所有对象都使用修改以后的值    
  4. 是否所有的属性方法都应该使用静态
  	 1》使用了静态以后, 都是用最后一个修改以后的值, 所有人的值都一致 
  		如果所有值都是相同的结果,则可以考虑用静态的, 减少内存开销
     2》 内存方面: 
      	静态属性方法 比对象存在内存时间都要长,所以适当使用静态          
      	频繁使用的功能,可以定义成静态的  可以形成工具类

静态属性、方法

①.静态方法中只能调用本类中 其他的静态成员(变量和方法)
②.静态方法中不能使用super和this关键字
③.静态成员可以通过类名或类的实例去访问
静态成员推荐使用类名调用。非静态成员推荐使用对象的引用调用
允许被继承,不允许被重写

1、静态的属性方法先进内存
2、当创建对象以后   非静态的属性和方法才进内存		
    	方法是静态   属性是非静态 , 是否能在 方法中使用属性 :   不能
		属性是静态的        对象是非静态(创建对象以后才进内存)    允许存在 
		要求: 必须内存中有 才可以使用

this 和super 在静态方法中是不允许存在的

在静态的方法中  不能直接使用非静态的属性和方法的, 此时非静态的是和方法还没有进入到内存区域
	public static void a(){
		//System.out.println(age);
	}

代码块(静态、局部、构造)

静态代码块    
 	  static{
 	  		静态代码块经常用来初始化类的静态成员变量
 		} 
	    静态代码块:无论创建几个对象 都只会执行一次
	    
构造代码块:会随着对象创建的次数增加 而增加
	  				都比 构造方法执行的早
	  
局部代码块, 是在调用方法的时候才会执行
 执行顺序:
		  静态代码块 --》 构造代码块 --》 构造方法 --》 调用的时候才会执行局部代码块
		  静态代码块:  类似于 注册 数据库的驱动,则可以写到静态代码块中
// 构造代码块
	{
		// 代码块   构造代码块
		System.out.println("构造代码块");
	}
// 静态代码块
	static{
		System.out.println("静态代码块");
	}
// 构造方法
	public Cat() {
		System.out.println("构造方法");
	}
// 局部代码块
	public static  void catchMouse(){
		System.out.println("猫抓老鼠");
		{
			System.out.println("局部代码块");
		}
	}

==与equals

对于值类型:
		"=="比较的是数值是否相等,值类型没有equals方法
对于引用类型:
		如果该类型没有重载equals方法,则“==”和“equals”方法返回的结果一致,即比较两个变量引用的地址是否相等
		如果重载了equals方法,则equals方法的行为需要看重载方法的具体定义,“==”依然比较的是两个变量的引用地址
		
String类中的equals比较的是  字符串内容
Object类中的equals比较的是  内存地址

重写equals
如果想要比较内容相同 则认为是同一个对象 则返回true 需要重写equals方法

	@Override
	public boolean equals(Object obj) {
		// this == obj  
		// person  == person2
		if(this == obj){
			return true;
		}
	// 地址不同,要挨个比较属性是否相同 
		Person person2 = (Person) obj;
		if(this.age == person2.age){
			// 年龄相同
			// 继续比较姓名
			if(this.name.equals(person2.name)){
				return true;// 两个person对象的属性值是相同
			}
		}
		return false;// 两个person对象属性值不同, 
	}

值传递、引用传递

一般认为,java内的传递都是值传递

值传递:
		值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量.
引用传递:
		引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。 所以对引用对象进行操作会同时改变原对象.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值