java学习(六)——自定义类、内存分配

自定义Student类 

public class StudentTest
{
	public static void main(String[] args)
	{
		//如何使用类
		/*1.创建对象		
			格式:  类名 对象变量名=new 类构造器();	类构造器也称类构造方法
			注:创建的对象位于堆内存中
		*/
		Student s1=new Student();		//这里的Student是默认的构造器
		System.out.println("名字:"+s1.name+" 年龄:"+s1.age+"\t住址:"+s1.add);
		/*2.使用成员变量 
			格式: 对象.成员变量
		*/
		s1.name="叶叶";
		s1.age=17;
		s1.add="甘肃省**********";
		System.out.println("名字:"+s1.name+"年龄:"+s1.age+"\t住址:"+s1.add);
		/*3.调用成员方法 
			格式: 对象.成员方法名(参数列表);		//前面的对象也称为该方法的隐式参数
		*/
		System.out.println(s1.name+s1.sleep());

		/*4.使用匿名对象
		匿名对象:没有名字的对象,即没有任何对象变量指向它
			常用于只使用一次对象的情况和作为实际参数进行传递
		*/
		System.out.println(new Student().name);	//new Student()就是一个匿名对象
	}
}

/*
	定义一个类就是定义该类的成员变量和成员方法
	类:
		成员变量:		对应事物的属性
		成员方法:		对应事物的行为
*/
//定义一个Student类
class Student
{
	//定义变量(也可以称为实例域(必须创建对象才能使用)或数据域)
		String name;	//成员变量
		int age;		//成员变量
		String add;		//成员变量

		//定义成员方法(也成为实例方法)
		public String sleep()
		{
			return "睡觉";
		}
		public void eat(String food)
		{
			System.out.println(name+"吃"+food);
		}
		
		//以下三个方法用于返回实例域的值,因此又被称为域访问器
		public String getName()
		{
			return name;
		}
		public int getAge()
		{
			return age;
		}
		public String getAdd()
		{
			return add;
		}
		//以下三个方法用于修改实例域的值,因此又被称为域更改器
		public void setName(String name)
		{
			this.name=name;
		}
		public void setAge(int age)
		{
			this.age=age;
		}
		public void setAdd(String add)
		{
			this.add=add;
		}
}

定义域更改器和域访问器的优点

 1.可以改变类内部的实现,除了该类的方法外,不会影响其他代码

    如:将                 String name; 
      
        改为              Strint xing;    //表示姓
                         String ming;    //表示名
       
        将方法            public String getName(){
                               return name;
                         }
      
        改为              public String getName(){
                                return xing+ming;
                         }

   如果改变类后想要获得name时,主方法中就要使用    对象.xing+对象.ming
   而如果使用域访问器,主方法中就不需要做任何改变。

2.域更改器方法可以进行错误检查


                直接对域进行赋值时        对象.age=-12;        //
很明显age的值不能小于0,但是并不会报错   
                而使用域更改器可以判断age是否小于0,从而进行错误处理

注意:

不要编写返回可变对象的访问器方法,如:

class Student{
    private Date day;
    ……
    public Date getDay()
    {
        return day;
    }
    ……
}
public class Student{
    public static void main(String[] args)
    {
        Student st1=new Student();
        Date d1=st1.getDay();
        //d1和st1.day所引用的是同一个Date类对象;修改d1就会影响到st1的实例域,破坏了类的封装性
    }
}

 如果需要返回一个可变对象的引用,应该首先对其进行克隆(clone)。即将对象在别处拷贝一份副本。然后将副本的引用返回。改进后如下。

class Student
{
    private Date day;
    ……
    public Date getDay(){
        return (Date)day.clone();
    }
}

在实现一个类时

1.常常将所有的数据域设置私有的private,确保只有类自身的方法才可以访问这些数据域,从而保证了类的封装性。
2.常常将方法设置为公有的public,public意味着任何类任何方法都可以调用这些方法

私有方法

有时,可能希望将一个计算机代码划分为若干个独立的辅助方法,而这些辅助方法不应该成为公有接口的一部分。(它们往往与当前的实现机制非常紧密,或者需要一个特别的协议以及一个特别的调用次序)这时可以把这些方法设置为私有方法

 实现私有方法的方式使用关键字 private 访问修饰符修饰方法
 特点1.只有类自身的方法才可以调用这些方法。
             2.由于是私有的,类的设计者可以根据情况改变或删除私有方法

     

内存分配及程序运行过程

 

 

返回目录 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值