JAVA中对象与类的特性

2020-04-17 java学习记录

1.java内存划分
在这里插入图片描述
①栈:存放的都是方法中的局部变量,方法一定要在栈中运行。
局部变量:方法的参数,方法中的局部变量
作用域:一旦超出作用域,立刻从栈内存中消失

②堆:new出来的对象都存在堆中

③方法区:存储.class信息,方法信息

2.对象与类,
封装:将数据和行为组合在一个包里,并对对象的使用者隐藏具体的实现方式。
类之间的关系:
· 依赖
· 聚合
· 继承
①依赖就是一个类的方法操纵另一个类,我们就说一个类依赖另一个类;在设计时应尽量减少依赖关系,即减少类之间的耦合。

②聚合
类A的对象包含类B的对象

④对象构造:

  1. 重载:
    多个方法有相同的名字,不同的参数则出现重载。(注意,返回类型不做考虑)。

使用null引用:
一个对象变量包含一个对象引用,活着包含null,如果对null应用了方法会产生严重的错误,因此在定义一个类时首先清楚哪些字段可能为null。
**在java 8+中 objects类提供了一个便捷的方法用来捕获空指针异常

public Employee(String n,double s){
	name=Objects.requireNonNull(n,"unknown");
	....
}

当产生空指针异常时,会抛出定制的NullPointerException.

注意
不要编写返回可变对象引用的访问器方法,例如:

class Employee{
	private Date hireDay;
	public Date getHireDay(){
		return hireDay;
	}
}

LocalDate类没有更改器方法,但Date类有setTime,即Date对象是可变的,这破坏了封装性。因为如果在外面的一个Employee对象调用getHireDay方法,返回给Date d,这样两个变量引用同一个对象,一旦d调用setTime方法就该变了Employee对象的私有状态,这是不被允许的。
解决方案

class Employee{
	public Date getHireDay(){
		return (Date)hireDay.clone();
	}
}

总结
如果需要返回一个可变数据段的引用则应该使用clone();

final字段
① 定义了final的字段必须在构造1对象时初始化,即在每一个构造器执行之后,final字段已经被设置了值,并且不能在修改

②final修饰符对于基本类型,不可变类字段尤其有用(不可变类是类中所有方法都不能改变对象状态),然而对于可变类可能会引起混乱。例如:

private final StringBuilder evaluations;
evaluations=new StringBuilder();
evaluations.append(...);

final修饰符只是表示对象引用不会指向另一个对象,并不代表这个对象的状态不能改变!!所以注意

3.Random用法,看三太子敖丙微信文章

4.static

①静态字段:
定义一个static字段,则每个类只有一个这样的字段,不属于对 象,属 于类,凡是本类对象,都共享一份。

②静态常量:
static final 由于每个对象都可以修改公共字段,因此当不想这样时可以加上final关键字,System类中的out对象就是这样一个静态常量对象

public class System{
	public static final PrintStream out=...;
}

③静态方法
1.静态方法没有this隐式参数
2.静态方法可以访问静态变量与字段,但不能访问非静态字段,因为其不能在对象上操作(非静态字段是属于对象的)

④工厂方法

⑥静态代码块(学习jdbc时有很大用处)
在这里插入图片描述
①第一次使用本类时,静态代码块执行唯一的一次,且静态内容总是优先于非静态内容,即静态代码块比构造方法先执行。
②用途:用于一次性初始化静态成员变量

public class Test{
	static{
		...
	}
}

5.方法参数
有两种类型的方法参数
基本数据类型
对象引用
我们知道一个方法是不可能修改基本数据类型的参数其为按值传递,那对象引用作为参数会怎样呢?

当对象引用作为参数时他的执行过程为:
1.x初始化为参数的副本,即同为一个对象的引用
2.x可以在方法中修改该对象的状态
3.方法结束后,x不再使用,但对象参数的状态已经改变。

但这并不代表对象引用参数时引用传递,实际上还是按值传递,因为方法不能让对象参数引用一个新的对象。

总结:
1.方法不能修改基本数据类型的参数
2.方法可以改变对象参数的状态
3.方法不能使对象参数引用一个新的对象

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值