java学习(6)————对象与类

构造器

即C++中的构造函数。

  • !!: java中的构造器总是伴随着new操作符一起使用

另一种获取类实例的方法:静态工厂方法
【相关知识点:单例】【多了一层“皮囊”用处挺大】

————————————————————————————

var声明方法中的局部变量

在java10中(其他版本还没测),如果可以从变量的初始赋值来推导出它们的类型,则可以使用var关键字来声明局部变量而无需指定类型

Employee Harry =  new"Harry Hacker"50000,1989,10,1);
|
V
var Harry =  new"Harry Hacker"50000,1989,10,1);
  • 一般不在数值类型使用时用var,以分辨其精确度

————————————————————————————

NULL引用

在前面的笔记中学习了java的NULL字段。与C++的赋值不同,java的
null就是表示“空”的含义,所以对一个null值调用一个方法是一种很不好的行为,这样做会返回一个NullPointerException异常。

  • 正常情况下,除非非常需要,程序一般不会捕获这些异常,而是寄期待于程序员不要带来这些异常。
  1. "宽容型"方法:
    将null参数转换为一个适当的非null值
    if(n==null)name = “unknown”
    else name = n;
java9中提供的便利方法,用以实现以上语句类似功能
name = Objects.requireNonNull(n,"unknown");
  1. "严格型"方法:

直接拒绝null参数:

 name = Objects.requireNonNull(n,"The name cannot be null");

一般用在构造器中,假如录入了一个null值,则会返回异常,此时上述语句可以更好的描述异常的情况。

————————————————————————————

隐式参数与显式参数

显式参数就是显于参数列表的那些传值
隐式参数其实有点像C++中的类::
它一般是这个方法的调用者,或者目标,叫法不同,其实一样
(this关键字所指代的就是隐式参数)

  • java中this是隐式指代自己关键字,与C++中的this指针不一样,调用方法的时候直接用点而非箭头
  • 有些程序员更喜欢用this指代实例字段的同名变量以便于与局部变量区分

————————————————————————————

封装小点

尽量不要写返回一个可变对象引用的访问器方法,比如返回一个Date对象,对象中有着更改器方法

这样的结果是破坏了封装性!
如果真的有此类需要,请对此对象引用的克隆,此克隆是在另一个储存位置上的副本。有关对象克隆的知识将在后续学习
————————————————————————————

传参

在java中,总是采用按值调用,所有的传值参数都只是传进去了一个副本!
但是这个副本虽然会被丢弃,在方法中调用它的修改器方法,就能够对原始对象的数据进行合适的操作啦!
————————————————————————————

java是可以在类声明中对类里面的字段初始化赋值的
class{
private String name =“”
}
初始化值不一定是常量值,甚至可以使用方法的返回值来对其赋值
————————————————————————————

this特殊用法:调用另一个构造器

如果构造器(a,b)第一个语句形如this(c,d);这样就会在构造开始时先调用同一个类的另一个构造器:
public Employee(double s){
this(“Employee#”+nextId ,s);
nextId++;

}
没记错的话C++中并不可以这么玩儿
————————————————————————————

初始化块

初始化数据字段的方法:

  • 在构造器中设置值
  • 在声明中赋值
  • 初始化块

这是个啥玩意?
在一个类的声明中,可以包含很多的{ 块},在构造器即将启用前,会先调用这些个代码块,在运行后再执行构造器主体部分

这种功能不常见。

可以在初始化块中设置字段尽管它在此类后面才被定义,但是为了避免循环定义,不允许读取在后面初始化的字段,事实上建议总是把初始化块放在字段定义之后!如果静态字段需要非常复杂的初始化代码,可以使用静态的初始化块 static{块}

构造函数调用顺序

  1. 判断是否在第一行调用另一个构造器并执行
  2. 所有字段初始化为默认值
  3. 按照类中出现的顺序性,执行所有的初始化方法和初始化块。
  4. 执行构造器主体
    —————————————————————————

析构器

java不支持析构器,它本身有着和很好的垃圾回收机制
但是如果用了内存外的其他资源,需要提供一个close()完成必要的清理。在后面会有学习

不要使用finalize方法清理,这个方法已经被废弃

————————————————————————————

JAR文件

核心技术I p140,强烈建议没事去看看加深印象。

p148开始的各种注释规范同理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值