java学习十四(创建类)

目录

  • java类的创建
    • java类创建代码的解释
      • 实例域
        • 实例域的三种赋值方式
      • 方法
        • 一.构造方法
          • 无参构造方法(默认构造方法)
          • 有参构造方法
        • 二.更改器方法和访问器方法
          • 访问器方法
            • 使用访问器的注意事项
          • 更改器方法
          • 其他的功能方法

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表明只有本类自身的方法能够访问这些属性,在类外以及类的对象不能直接访问。

实例域的三种赋值方式

  1. 声明时直接赋值(java语言允许这种赋值方式,当创建一个类的对象时,会进行赋值,c++不允许这种赋值方式,但是c++有相同作用的初始化列表,两者都有各自的考量)
  2. 在默认构造方法内和自定义有参构造方法内对实例域进行赋值
  3. 初始化块
    初始化块的方式
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的参数传递大概有三种情况

  1. 传递基本数据类型,值传递,方法内改变形参不会改变实参
  2. 传递的为引用数据类型,当改变形参对象的某个实例域时,实参的实例域也会改变,这一点要注意
  3. 传递的是引用数据类型,但是当改变形参的引用对象时,实参的引用不会改变
使用访问器的注意事项

因此这里有一个问题,当访问的是实例域内的引用对象时,最好不要直接return,而是要进行clone();
例如:

//比如访问类内的一个Date类引用数据类型
	private Date dateOfWork;
	public Date getDateOfWork() {
		return (Date)dateOfWork.clone();
	}
更改器方法

set系列的方法一般叫做更改器方法,用于更改实例域的值
为什么要使用更改方法而不是直接访问这个类的属性呢

  1. 直接访问类的属性无疑破坏了类的封装
  2. 直接访无法对赋值进行控制,例如一个人的年龄不会小于0,也不会大于150(已知世界上寿命最长的人是印度尼西亚的马巴高索,146岁,吉尼斯世界纪录认证)
  3. 通过更改器方法我们就可以在方法通过条件语句对赋值加以限制
其他的功能方法

除了上述构造器方法,更改器方法,访问器方法,也可以设置其他的方法,也就是类的行为,比如动物的猫类,猫会抓老鼠,会攀爬等,这些方法可以自己进行定义。
注意
类的方法一般有两个参数,显示的和隐式的,显示的就是参数列表中的参数,隐式的就是类的对象,例如
对象名.方法名(参数列表);
对象就是这个方法的隐式参数

如有错误,敬请指正

你可能感兴趣的:(java学习计划,java,学习,jvm)