目录
java类的创建
java的一个源文件中只能有一个公有类,但是非公有类可以有多个,java类的基本创建为:
class ClassName{
//实例域,也就是类的属性,可以使基本数据类型或者引用数据类型
//下面为举例
private int name1;
private double name2;
private String name3;
//构造器
//无参构造器
public ClassName(){
//----
}
//有参构造器
public ClassName(int _name1,double _name2,String _name3){
//赋值
name1=_name1;
name2=_name2;
name3=_name3;
}
//还可以有其他构造器,参数不一样
//访问器--get系列方法
public int getName1(){
return name1;
}
//-------
//更改器--set系列方法
public int setName1(int _name1){
name1=_name1;
}
//其他的功能方法
//例如打印实例域信息
public void show(){
System.out.println("name1 : "+name1);
System.out.println("name2 : "+name2);
System.out.println("name3 : "+name3);
}
}
java类创建代码的解释
实例域
实例域也就是类的属性,
private int name1;
private double name2;
private String name3;
private为限定修饰符,限定了实例域的访问属性,private表明只有本类自身的方法能够访问这些属性,在类外以及类的对象不能直接访问。
实例域的三种赋值方式
- 声明时直接赋值(java语言允许这种赋值方式,当创建一个类的对象时,会进行赋值,c++不允许这种赋值方式,但是c++有相同作用的初始化列表,两者都有各自的考量)
- 在默认构造方法内和自定义有参构造方法内对实例域进行赋值
- 初始化块
初始化块的方式
int name1;
int name2;
{
name1=value;
name2=value;
}
注意:
相对于初始化块,还有一种静态初始化块
static{
//代码
}
当加载一个类时,这个静态块会被加载执行
方法
一.构造方法
构造方法有有参构造方法和无参构造方法
public ClassName();//无参构造构造方法
public CalssName(int _name1,double _name2,String _name3;);//有参构造方法
无参构造方法(默认构造方法)
无参构造方法又叫默认构造方法,当创建了一个对象,new ClassName();默认调用无参构造方法。
有参构造方法
有参构造方法,笔者认为可以叫自定义构造方法,当没有自定义构造方法时,系统会自动创建一个无参构造方法,即默认构造方法,当有自定义构造方法时,系统则不会创建,因此,当有自定义构造方法时,最好也创建一个默认构造方法。
注意
这里介绍一下this指针
当参数与类内的属性变量名相同时,可以使用this指针表明这个变量是类的属性变量。例如:
class CalssName{
private int name1;
public CalssName(int name1){
this.name1=name1;//第一个name1就是类的属性变量,第二个是参数中的变量
}
}
java还允许使用this指针调用另外的构造器
二.更改器方法和访问器方法
public int getName1();//访问器方法
public void setName1(int _name1);//更改器方法
访问器方法
get系列的方法一般叫做访问器方法,一般用来访问类的实例域,方法一般直接return 实例域;
但是请注意
我们这里讨论一下java的参数传递方式,c++有两种参数传递方式,值传递和引用传递,但是java只有值传递,有些方法似乎是引用传递,实际上依旧是值传递,java的参数传递大概有三种情况
- 传递基本数据类型,值传递,方法内改变形参不会改变实参
- 传递的为引用数据类型,当改变形参对象的某个实例域时,实参的实例域也会改变,这一点要注意
- 传递的是引用数据类型,但是当改变形参的引用对象时,实参的引用不会改变
使用访问器的注意事项
因此这里有一个问题,当访问的是实例域内的引用对象时,最好不要直接return,而是要进行clone();
例如:
//比如访问类内的一个Date类引用数据类型
private Date dateOfWork;
public Date getDateOfWork() {
return (Date)dateOfWork.clone();
}
更改器方法
set系列的方法一般叫做更改器方法,用于更改实例域的值
为什么要使用更改方法而不是直接访问这个类的属性呢
- 直接访问类的属性无疑破坏了类的封装
- 直接访无法对赋值进行控制,例如一个人的年龄不会小于0,也不会大于150(已知世界上寿命最长的人是印度尼西亚的马巴高索,146岁,吉尼斯世界纪录认证)
- 通过更改器方法我们就可以在方法通过条件语句对赋值加以限制
其他的功能方法
除了上述构造器方法,更改器方法,访问器方法,也可以设置其他的方法,也就是类的行为,比如动物的猫类,猫会抓老鼠,会攀爬等,这些方法可以自己进行定义。
注意
类的方法一般有两个参数,显示的和隐式的,显示的就是参数列表中的参数,隐式的就是类的对象,例如
对象名.方法名(参数列表);
对象就是这个方法的隐式参数
如有错误,敬请指正