自定义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.由于是私有的,类的设计者可以根据情况改变或删除私有方法
内存分配及程序运行过程