类的定义方式及对象初始化
类是对对象的描述
对象是类的实例化
类:
一个文件里可以有多个类,但只有一个类能用public修饰;一般一个文件一个类;(main方法一般定义在public的类中,因为Eclipse默认在public类中找main方法),同级夏类名不能重复
类名采用大驼峰命名
要想修改类名需要去修改文件名(如果文件中只有一个类那么修改文件名时也会修改类名)
对象:
Dog dog = new Dog();
通过new来实例化对象(对象在堆上,dog在栈上,dog中存放的是对象的地址),实例化的时候会在堆上给对象创建空间,属性被存进去,方法存的地址后续补充
通过对象的引用去访问成员属性和方法
注意创建对象后,系统会进行三步:
1检测该对象的类是否加载;
2给成员变量分配空间,赋默认值(注意此处是默认值,在定义的时候赋值,需要程序运行才能成功赋值给变量);
3处理多线程安全问题
4调用合适方法对属性赋值(例如构造方法,实例代码块(例如就地复制,set(),get()方法))
知识点补充:数据类型
除去8种基本类型外均为引用类型;
引用类型变量只能同时指向一个对象,不能指向引用变量(因为无法获取栈上的地址)
Dog dog =null;意思是dog对象不指向任何对象;
类中成员变量和成员方法的使用
变量值交换:
需要引用变量才能完成,下面是地址存储解析图
参数需要传入的是地址。
代码实现:
成员变量:
定义在类之内,方法之外,又称属性or字段;
this引用:
当参数名和成员变量名相同时,此时调用的是局部变量(局部变量优先使用),此时要想成功给字段赋值就要this.
this代表当前对象,谁调用函数谁就是这个函数里的this
{原理:成员方法中会默认第一个参数是this,每次调用这个方法,那就系统会默认传入该对象作为参数
}
建议使用this,无论this加不加都没关系,编程习惯
对象初始化问题
默认初始化
成员变量在未初始化是均有默认值(局部变量不初始化那就会报错)
就地初始化
即在定义的时候初始化
注意,要么在定义的时候初始化,要么在函数里初始化。否则会编译异常。
使用构造方法初始化
初始化对象就会用到构造方法,在创建对象的时侯就能完成初始化,构造方法只执行一次
eg:Dog dog = new Dog("阿黄",19);
构造方法不能有返回值,且必须与类名相同
实例化对象时就会自动调用构造方法,当没有写构造方法时系统会自动加载一个空的构造方法,当自己写了构造方法,那么系统就不会再提供空构造方法;在一个构造方法内要想调用其他构造方法则要用:this(填参数,没有则为空),this()必须在第一行,构造函数之间不能相互this()形成闭环
构造方法可以重载