构造方法的定义
构造方法与普通方法不同之处在于:它在类中生成,所以专用于在构造对象时,初始化对象成员的,其名称与所属类名相同
构造方法的实现
构造方法在类中实现,所以先有一个类
如
class 类名
{
访问权限 类名(参数1,参数2,...参数n)
{
构造方法体
}
}
特点:访问权限分为 public private protect 三类
构造方法体名和类名一致
没有返回类型 这是与普通方法最大不同之处因为,构造函数用来初始化对象成员,而对象成员类型可以有很多,所以构造函数无需返回类型
下面几个特点还没有遇到 后面再加强
构造方法可以被重载使用
构造方法不能被static 和 final 修饰
构造方法不能被继承,子类使用父类的构造方法需要使用关键字super
一个大特点
构造方法在创建对象时,就会自动“隐式”执行,所***以构造方法无需在程序中直接调用,而是在对象产生时,自动执行一次***
刚刚开始写的时候 带了 ; 切记与函数一样 这里不用带; 这就是带了 ;结尾构造方法的结果
public class ConstructTest01
{
public static void main(String[] args)
{
Person P=new Person(12);
P.show("被调用!");
}
}
//在此类中构造一个方法:
class Person
{
public Person(int x)//
{
a=x;
System.out.println("构造方法被调用");
System.out.println("a="+a);
}
public void show(String str)
{
System.out.println("str="+str);
}
private int a;
}
再来一个 看看
class Book1
{
String title;
double price;
static String pub="出版社";
void print()
{
System.out.println("书名:"+title);
System.out.println("价格:"+price);
System.out.println("出版社:"+pub);
}
public Book1(String t,double pr,String pu)
{
title=t;
price=pr;
pub=pu;
System.out.println("被调用");
}
}
public class Book
{
public static void main(String[] args)
{
Book1 B=new Book1("图书馆",87,"酒楼");
System.out.println("fenge");
B.print();
}
}
构造方法私有化
例子
在PrivateDemo 类中 定义了一个私有化的构造方法
public class PrivateDemo
{
private PrivateDemo()
{
}
}
如果在另外一个类中想实例化上面这个类的构造方法
将会执行错误,因为该私有化的构造方法 是不能在其他类中可见
public class PrivateCallDemo
{
public static void main(String[] args)
{
PrivateDemo Demo=new PrivateDemo();//私有化的构造方法不能在一个新类中调用。
}
}
私有化的构造方法,只能在本类中,被调用
例子2
public class PrivateDemo
{
String name;
private PrivateDemo()//私有化的构造方法
{
name="GGGG";
System.out.println("name: "+name);
}
//在同一个类中,调用上面这个私有化的构造方法
public void main(String[] args)
{
new PrivateDemo();//在本类中可以调用
}
}
例子3其他类如何间接调用私有化的构造方法
也是通过和私有化同一类的public方法调用
public class PrivateDemo
{
String name;
private PrivateDemo()//私有化的构造方法
{
name="GGGG";
System.out.println("name: "+name);
}
//同类中调用私有化的构造方法
public static final PrivateDemo PRI=new PrivateDemo();
//上面在同类中调用了私有化的构造方法,
//下一步再创建一个普通方法来调用该对象PRI即可
public static PrivateDemo GetPri()
{
return PRI;
}
}
在其他类中调用上面这个类的普通方法,间接实现调用私有化的构造方法
public class TestPrivate
{
public static void main(String[] args)
{
PrivateDemo P=PrivateDemo.GetPri();
}
}
实现了 B类通过A类中的普通方法2的调用私有化构造方法1 使得了B类间接的调用了A类中的私有化构造方法。