Java中对象变量都是对对象的引用。
可以显式的将对象变量设置为空(null),表明这个对象变量未引用任何对象。
例: Date deadLine ;
deadLine = null ;
类中的构造方法与类名同名,构造方法没有返回值,
一个类可以有一个以上的构造方法。构造方法可以有0个及0个以上的参数。
构造方法总是伴随着new操作符的执行而被调用,而不能在一个已经存在的对象中再调用构造方法。
日历类应用:
import java.util.* ;
public class Test10
{
public static void main(String[] args)
{
GregorianCalendar gcal = new GregorianCalendar();
int today = gcal.get(Calendar.DAY_OF_MONTH);
int month = gcal.get(Calendar.MONTH);
gcal.set(Calendar.DAY_OF_MONTH,1);
int nday = gcal.get(Calendar.DAY_OF_MONTH);
int nweek = gcal.get(Calendar.DAY_OF_WEEK);
System.out.println("SUN MON TUE WED THU FRI SAT");
for(int i=Calendar.SUNDAY; i<nweek;i++)
{
System.out.print(" ");
}
do
{
System.out.printf("%3d",nday);
if(nday==today)
{
System.out.print("*");
}
else
{
System.out.print(" ");
}
if(nweek==Calendar.SATURDAY)
{
System.out.println(" ");
}
gcal.add(Calendar.DAY_OF_MONTH,1);
nday = gcal.get(Calendar.DAY_OF_MONTH);
nweek = gcal.get(Calendar.DAY_OF_WEEK);
}
while(gcal.get(Calendar.MONTH)==month);
}
}
输出结果;
Java编译多个源文件的时候,如果A引用了B文件中的类,则会寻找B.class文件,如果找不到会自动编译B.java文件,如果B.class文件版本较低,也会自动编译B.java 。
this关键字:
标示自己所在的对象,例:Myadd是类AAA里的一个方法,s是类里的成员,this.s就是指该类的成员s。对于成员函数同样理解。
void Myadd(int s)
{
this.s=s;
}
为了类的封装性,建议不要返回引用可变对象的方法。如下例子中就违反了封装性原则,虽然hireday被设置为私有的,但由于Date类型是可修改类型,调用setTime()方法仍然可以修改hireday。
import java.util.* ;
public class Test11
{
public static void main(String[] args)
{
Employee Temp = new Employee();
Date tempHireDay = Temp.gethireday();
System.out.println(Temp.gethireday());
System.out.println(tempHireDay);
tempHireDay.setTime(100000);
System.out.println(tempHireDay);
System.out.println(Temp.gethireday());
}
}
class Employee
{
public Employee()
{
hireday=new Date() ;
}
public Date gethireday()
{
return hireday;
}
private Date hireday;
}
为此,当需要返回一个可变对象的引用时,应该首先对其克隆,然后返回克隆的副本返回。
import java.util.* ;
public class Test11
{
public static void main(String[] args)
{
Employee Temp = new Employee();
Date tempHireDay = Temp.gethireday();
System.out.println(Temp.gethireday());
System.out.println(tempHireDay);
tempHireDay.setTime(100000);
System.out.println(tempHireDay);
System.out.println(Temp.gethireday());
}
}
class Employee
{
public Employee()
{
hireday=new Date() ;
}
public Date gethireday()
{
return (Date)hireday.clone();
}
private Date hireday;
}
类中的方法可以访问该类的任何一个对象的私有域。
例如:boolean isEqual(Employee lisi)
{
if (this.salary==lisi.salary)
return true
else
return false
}
final修饰成员,意味着在类实例对象中,final修饰的成员必须被初始化,且初始化后不能修改。
final修饰符大多用于基本数据类型成员或者不可变类型成员中,对于可变的类型,则容易造成混乱。
例如:类employee中String类型的name和Date类型的hireDate
private final String name ;
private final Date hireDate;
name和hireDate在employee的实例中都必须初始化,初始化后name成员不可变,但hiredate成员仍然可以调用Date类型的setTime()方法进行修改。
私有方法:
Java类中可以设置方法为私有,私有方法是内部使用,特殊是如果构造函数为私有的,可以用于单例模式。
import java.util.* ;
public class Test13
{
public static void main(String[] args)
{
Person TempPerson =Person.getInstance();
String name = TempPerson.getName();
System.out.println(name);
int age = TempPerson.getAge();
System.out.println(age);
TempPerson.setAge(150);
System.out.println(TempPerson.getAge());
Person TempPerson1 = Person.getInstance();
String name1 = TempPerson1.getName();
System.out.println(name1);
int age1 = TempPerson1.getAge();
System.out.println(age1);
System.out.println(TempPerson.getAge());
}
}
class Person
{
private String name;
private int age;
private static Person TestPerson = new Person("zhangs",100);
private Person(String name,int age)
{
this.name=name;
this.age=age;
}
public static Person getInstance()
{
return TestPerson;
}
public String getName()
{
return this.name;
}
public int getAge()
{
return this.age;
}
public void setAge(int age)
{
this.age=age;
}
}