类的成员的存储类型
为了说明类中成员的存储类型。假设定义一个类为作者类:
属性:
姓名,身高,体重
方法:
吃饭,睡觉
在类的定义中,可以声明其成员的存储类型,默认的存储类型是属于动态的。也就是说这个成员是属性对像的而不是属于类的。 比如:就作者这个类而言.
1:陈文杰是作者(在得用作者声明一个对像)
2:陈文杰的向高是1.70(在给对像的属性赋值)
3:作者的身高是1.70(无意义。说明身高这个属性应该是属于某个对像的,而不属于作者类的)
然后在某些情况下,有一些成员必须是属性类本身,而不能属于对像的。比如:
作者的个数。(是类本身的)
陈文杰的个数(无意义)
可见这个成员应该属于类本身的。于是我们就可以使用static来声明这种成员,被称为类的静态成员。
可见动态成员与静态成员的区别如下:
1:动态成员是属于对像的,而不是属于类的。因此不能用类名.成员来引用。
2:既然静态成员属于类的所以要引用静态数据成员时可以用:类名.静态成员
3:引入静态成员的目的是为了让某个类的多个对像共享这个类的属性或方法。所以静态成员也叫共享成员, 或类成员
对于静态数据成员说明:
1:静态数据成员如果不赋值,其值自动为零。
2:静态数据成员虽然属于类。但也可以用对像.静态数据成员。也就是说静态成员的引用方法有两种:
类名.静态成员 或 对像.静态成员
4:静态成员提供了一个让一个类的多个对像通信的一种手段。也就是说,多个对像共享同一个类的数据成 员,通过一个对像对类的静态成员的更改,会影响到另外一个对像使用的静态成员,而动态成员则属于一 个对像私有的,所以静态成员,也叫共享成员.
5:静态成员也可以分成私有(private或public的)其访问控制与动态成员完全一样
6:静态成员既可以是静态数据成员也可以静成成员函数。
7:静态成员函数只能够访问类中的静态成员,不能访问类的动态成员,而动态成员函数可以访问任何性质的 成员。静态成员函数的目的主要是用来访问同一个类中的静态数据成员,维护对像之间共享的数据
静态成员的应用
1:利用静态变量统计某一个类所有创建的用户个数:
class chen
{
private static int n; //静态成员
public chen()
{
n++;
}
public void prin() //非静态成员
{
System.out.print("类chen的对像个数是:"+n);
}
}
2:定义一个订单类,包括订商品名,数量,数量。来实现求所有订单的总金额
订单总金额是属于类本身的,不是属于每个订单的
class order
{
private String saveshopname;
private int savecount,saveprice;
private static int pay;
public order(String shopname,int count,int price)
{
saveshopname=shopname;
savecount=count;
saveprice=price;
pay+=price*count;
}
public static int getallpay()
{
return pay;
}
}
3:定义一个银行个人账户类,专门用来对具体的账户进行管理
包括:账号,密码,余款
从账户类的每个对像出发考虑:
对每个账户(对像):可以存款,取款,转账,查询余额,得到账户的账户,和密码
从账户类出发: 添加账户,删除账户,得到所有账户的余额 ,打印等[静态方法]
class bank
{
private String saveid,savepass;//用来保存一个账户账号和密码
private float remain; //用来保存一个账户的余额
private static int n;
private static bank savebank[],temp[];
public bank(String id,String pass) //构造函数
{
saveid=id;
savepass=pass;
remain=0;
}
public static void addaccount(bank add) //添加账户
{
int i;
n++;
if (n==1)
{
savebank=new bank[1];
savebank[0]=add;
}
else
{
temp=new bank[n-1];
for(i=0;i<n-1;i++)
temp[i]=savebank[i];
savebank=new bank[n];
for(i=0;i<n-1;i++)
savebank[i]=temp[i];
savebank[i]=add;
}
}
public static void delaccount(bank del,String pass) //删除账户
{
int i,j=0;
n--;
if (!(del.getaccountpass().equals(pass)))
System.out.println("密码不对,不能删除!");
else
{
temp=new bank[n];
for(i=0;i<savebank.length;i++)
if (!(savebank[i].getaccountid().equals(del.getaccountid())))
temp[j++]=savebank[i];
savebank=new bank[n];
for(i=0;i<n;i++)
savebank[i]=temp[i];
}
}
public static float getallmoney() //得到所有账户的余额
{
float sum=0;
int i;
for(i=0;i<savebank.length;i++)
sum+=savebank[i].getremain();
return sum;
}
public void saving(float money) //存款
{
remain=remain+money;
}
public void getout(float money) //取款
{
remain=remain-money;
}
public void remit(bank target,float money) //汇款
{
remain=remain-money;
target.saving(money);
}
public String getaccountpass() //得到某个账户的密码
{
return savepass;
}
public String getaccountid() //得到某个账户的账号
{
return saveid;
}
public float getremain() //得到余额
{
return remain;
}
public static void print()
{
int i;
System.out.println("账号\t余额");
System.out.println("-------------------------------------");
for(i=0;i<savebank.length;i++)
System.out.println(savebank[i].getaccountid()+"\t"+savebank[i].getremain());
System.out.println("-------------------------------------------------");
System.out.println("所有账户的总余额是:"+getallmoney());
}
}
java源程序的组织方式
源文件是我们开发程序的基本单位,java源文件是扩展名为*.java的纯文本文件。在一个java源文件中只充许定义0个或一个public类。但可以同时有不同的不受限制的多个类。如果源文件里面包含了一个public类,则文件的源文件名必须要与类名一致,否则会出现错误。public类,被称为共有类,可以被包以外的程序来使用。不同的程序员,在组织源程序时,有自己的爱好。基本上有两种方式:
1:一个源文件就是一个类。
2:一个源文件里面放很多类
建议:在开发大型的程序时,应该每一个类,占用一个源文件,这样便于好管理
评论