Java面向对象(三)

Java面向对象(三)


值传递

值传递:将数值传递给方法,进行计算,不影响之间的值,传递的值是一个副本
引用传递:将对象本身传递给变量。
注意:在java中没有引用传递,只有值传递

object(续)

object 提供了所有类共有的各种方法

toString

父类的toString 方法就讲内存地址转化为类名+hashcode码
java规定,如果你输出的对象是变量,默认调用toString讲内存地址转化为字符串输出。如果是对象.属性 或者属性.方法 会输出对象的属性值或方法。

equals

比较两个对象是否相等到,子类可以重写,根据自己的需求进行重写。

hashcode

equals 和 hashcode 两个方法都是用来判断两个对象是否相等的方法,但是equals在进行比较的时候,本质是比较对象所有的属是否相等,如果属性全都相等,当前两个对象就想等,这种验证方法效率比较低。
hashcode 来比较,hashcode 方法用hash值来比较(hash算法),效率非常高。
hashcode 并不是完全可靠的,有时不同对象生成的hashcode一样。
特点:equals 相等的两个对象,他们的hashcode值一定相等,也就是说equals来判断绝对可靠,hashcode相等对象,进行equals比较并不一定相等,hashcode 并不是绝对可靠。

super关键字

java中有几种表示形式:

  • 1、super.属性 表示表演父类的属性
  • 2、super.方法 表示调用父类的方法
  • 3、super(参数) 自己指定父类调用的构造器
    在java类中,在使用super关键字来表示引用父类的属性和方法,this.表示当前类的对象,super.表示父类的对象。
    final 关键字

final修饰变量:
变量的值就不能改变,变成常量。
final 修饰类:
表示当前类不可被继承。
final 修饰方法:
该方法不能被重写。

类的高级特性:

访问修饰符:

类的每个成员(包括变量、方法和构造器)都有一个访问修饰符,用来判断 谁可以访问该成员。
访问修饰符的作用是限制属性和方法被使用和调用的范围,指明了类的数据成员和方法的能够被访问的程度
在这里插入图片描述

封装:

封装:

将类的某些信息隐藏在类的内部,不允许外部直接访问,而是通过类提供对外的接口来访问当前的数据。
特点:

  • 构造器必须public
  • 属性必须是私有的(private)
  • 提供属性接口(get访问器,set修改器)
  • 类是可序列化的。(implements Serializable)
javabean:

遵循上述三条规范的对象叫做javabean对象,是java中设计的一种可重用的组件。
封装的优点:

  • (1): 良好的封装能够减少类与类之间的耦合
  • (2): 类内部的结构可以自由修改
  • (3):可以对属性(成员变量)进行控制
  • (4):隐藏信息,实现细节

静态类

static变量

java中其实不存在全局变量的概率,我们可以使用static来实现一个伪全局的概念。static 在java中表示全局或者静态的意思。
用static 来修饰属性或方法,当前属性或方法就属于类级别。
对象级别: 成员变量、成员方法。
类级别: 静态的内容都属于类级别。
在类加载时,类的静态变量就已经在内存里创建了空间,静态变量默认在方法区,通过内创建的对象,每个对象都可以共享静态变量。

成员变量和静态变量的区别:

1、静态变量随着类加载就初始化,在内存中有且仅有一个,jvm只会给当前类的静态变量分配一次内存,同时类的静态变量是所有对象共享的额,还可以通过类名.静态变量来访问。

	class TestStatic {
		static String name;
		public static void main(String[] args) {
			String name = TestStatic.name;
		}
	}

2、实例变量:伴随着对象的产生而创建,每个对象都有对应的实例变量。所有的实例变量都是和对象同生共死的。

一般公共的条件(共享的)一般设成静态的。

static方法

与static 变量一样,属于类的方法。main方法就是静态方法。
成员方法和静态方法调用成员变量和静态变量的区别:
1、静态方法可以直接调用本类中的静态成员
2、静态方法不能调用非静态成员变量(成员变量还未创建)
3、普通方法可以调用静态变量也可调用普通变量
4、静态方法可以调用静态方法,但不能调用普通方法
5、普通方法可以调用成员方法,也可以调用静态方法。

静态块
public class StaticBlock{
	public StaticBlock() {
		System.out.println("这是构造器")
	}// 最后执行构造器
	{
		System.out.println("这是一个普通块1");
	} // 先执行块1
	{
		System.out.println("这是一个普通块2");
	} // 在执行块2
	static {
		System.out.println("这是个静态块")
	} // 最先执行,并且只执行一次
}

普通块:在类下{ } 来书写的代码就称为普通块,作用每次在产生对象的时候都会执行。
静态块:在普通块前加一个static 表示静态块,类加载时就在内存创建空间,并且有且仅有一个,不管创建多少个对象都共享这个块。
执行顺序:静态块—普通块—构造器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值