因为全几天网络问题,所以只能今天把前几天总结的一起发出来。
2010年3月4日
Java
编译JavaApplet源文件产生的字节码文件扩展名为class
main方法是JavaApplication程序执行的入口点,关于main方法的方法头以下哪个说法是合法的
public static void main(String args[])
若a=3则下面程序后的C值为多少
c=1;
if(a>0)
if(a>3)c=2;
else c=3;
else c=4
答C=3
执行完代码 int[] x = new int[25];后正确的是
x[24] 因为索引是从0-24 一共25个
什么类决定了字体的显示,大小和位置
int a=10,b=4,c=20,d=6;
System.out.print(a++*b+c*--d);
答案140
数组中可以包含 任何数据类型
switch 语句中 表达式的值 必须是int或者char
设x=2.5,y=4.7 算术表达式x+(int)(x+y)%2/4的值为2.5
对象应用
对象的内存模型
用类创建一个对象时,类中的成员变量被分配内存空间,这些空间称作该对象的实体,而对象中存放着引用,以确保实体由该对象操作使用;如果两个对象具有相同的引用,那么他们就是完全相同的实体
使用new运算符,调用构造方法
在为各个成员变量分配内存后,将返回一个引用给对象,也就是返回一个地址号(比如0x23AB6)给对象,以确保这些变量是属于对象的,即这些内存单元将由对象“操作管理”。
对象是引用型变量 32位地址空间 对象所在的实际的内存地址是不可操作的,这就保证了安全性。
对象的内存模型可以通过成员变量的形式模拟出一间编号为“201”的多媒体教室,可以容纳50名学生,配备了黑板及完善的多媒体计算机教学系统。
对象的使用
类实例化可生成一个对象,对象的生命周期包括生成、使用和消除三个阶段。
消息传递,在对象的使用阶段,对象通过消息传递来进行交互,消息传递即激活指定的某个对象的方法,以改变其状态或让它产生一定的行为。
对象不仅可以操作自己的状态变量的改变状态,而且还拥有了使用创建它的那个类中的方法能力。
/
static关键字
实例变量和类变量
使用static关键字可以声明类变量,格式如下
static type classVar;
不实用static关键字修饰的是实例变量
class dog
{
float x; //实例变量
static int y; //类变量
}
实例变量与类变量的区别
多个对象使用不同的内存空间,不同的类对象,使用相同的内存空间
若改变其中一个对象的类变量的值,则会影响其他对象的这个类变量的值。我们说,对象共享类变量。
类变量仅在生成第一个对象时分配内存,
引用或修改类变量时可使用类名做前缀,也可以使用对象名做前缀。
如
Employee empl1,empl2
Employee.Salary; //使用类名
empl1.Salary; //使用对象名
empl2.Salary; //使用对象名
类变量可以通过类名直接访问,无须生成一个实例对象,也可以通过对象,访问类变量。
使用static声明的方法称为类方法
实例方法和类方法的区别
1实例方法不能由类名调用,类方法即可由对象调用,又可直接由类名调用。
2实例方法既能对类变量操作,也能对实例变量操作;而类方法只能对类变量进行操作。
实例方法可以对当前对象的实例变量进行操作,也可以对类变量进行操作,实例方法由实例对象调用。
但类方法不能访问实例变量,只能访问类变量,类方法可以由类名直接调用,也可以由实例对象进行调用。
//
包也叫做类库或者 函数库
package 包名(合法的标识符,所有字母小写)
package语句必须放在整个Java源文件的第一条语句,而且前面不能有注释和空格
包是一种松散的类的集合。基于Java语言编程的需要,通常把需要在一起工作的类放在一个包里,以便实现不同程序间类的复用。处于同一个包中的类一般不需要有明确的相互关系。
包名也可以使若干个标识符加“.”分割而成,例如
packag.sum.con.cn;
实际上,创建包就是要在指定目录下,存放这个包中包含的所有类的class文件,这样一来Java程序运行并需要装在class文件时,它就可以找到class文件驻留的那个目录,其作用是
指明该源文件定义的类都属于这个包。
默认包
默认情况下 源程序中没有package语句,系统会为源程序创建一个默认包,也称作无名包
若属于无名包,默认情况下,一个类只能引用与它在同一个包中的类
包的引用
作用
java.applet 包含所有实现 Java applet的类
java.wat 抽象窗口工具集中的图形、文本、窗口GUI类
java.awt.image 包含抽象窗口工具集中的图像处理类
java.lang 核心类库,包含所有的基本语言(系统以自动加载的方式引入该包,不必再使用import语句)
java.io 输入输出类
java.net 网络功能
java.until 有用的数据类型类
用户自定义包的引用
预定义类及其成员一般应具有public修饰符、其中public类在文件里有且能有一个,而且那个类的名字必须和文件名相同。
访问权限
public private protected 有好的
public 共有的 使用public关键字时,它意味着紧随在public后面的成员声明适用于所有人。缺点造成安全性和数据封装性下降
私有变量和私有方法 private
只有在本类中创建该类对象时,这个对象才能访问自己的私有成员变量和类中的私有方法,这似乎将类与我们自己都隔离起来
有好的
有好访问拥有“包访问性”也就是说有好变量和有好方法拥有了 包访问 权限
类Jerry与Tom在同一个包中,则类Tom的对象cat能访问自己的有好变量和有好方法
注意 1 在源文件中编写命名的类总是在同一包中。
2如果你在源文件中用import语句引入了另外一个包中的类,并用该类创建了一个对象,那么该类的这个对象将不能访问自己的有好变量和有好方法
protected提供一个特殊的权限,允许访问衍生类,这是一种以现有的类(父类)为基础,产生一个新子类的机制。
注意:不可将类设成private(那样会使除类之外的其他东西都不能访问它)也不能设成protected。我们在对于类的访问只有两个选择 有好的 或者 public
类的封装性
1即以对象的形式将数据和对数据的操作结合在一起,形成一个不可分割的独立实体,该对象对外形成一个性出的界限,对象的所有私有成员和私有方法的实现细节都被封装在该界限内。
2由于受到封装壳的保护,其他的对象不能直接访问和修改本对象所拥有的所有私有成员和私有方法。
封装的原则在软件上的反应是:要求使对象以外的部分不能随意存取对象的内部数据(属性)从而有效地避免了外部错误对它的 交叉感染 使软件错误能够局部化 打打减少查错和排错的难度
通过对象的封装,实现了模块化,通过对类的成员施以一定的访问权限,实现了类中成员的信息隐藏,设计人员可以把握他们所提供的服务界面,而用户则只能看见对象所提供的操作功能。
案例
//本来格式是好的,粘贴过来就不好了。
class Bank
{
private String id;
String name;
private String idcard;
private String password;
private float money;
Bank(String _id,String _name,String _idcard,String _password,float _money)
{
id = _id; //在构造方法中,为变量赋值
name = _name;
idcard = _idcard;
password = _password;
money = _money;
}
public float getMoney(String _id,String _idcard)
{
if(id == _id && idcard==_idcard)
return money;
return 0;
/*外界通过对象的这些方法访问对象的属性
书上的代码是
if(id == _id && idcard==_idcard)
return money;
没有下面一行的return语句,但是编译无法通过,可能是因为如果账号密码不正确if语句不执行,
就没有返回值了,所以我在下面一行加入了return 0;的代码,就是如果你账号密码不对,那么你就有0块钱,
没办法只是一个例子,不能和真正的银行系统那么严谨*/
}
float saveMoney(String _id,float saveMoney)
{
if(id==_id)
money=money+saveMoney;
return saveMoney;
}
//外界通过对象的方法,对同一封装中的属性进行存取处理。
float drawMoney(String _id,String _password,float _drawMoney)
{
if(id == _id && password==_password)
money = money - _drawMoney;
return _drawMoney;
}//取款处理
void changePassword(String _idcard,String oldpassword,String newpassword)
{
if(idcard==_idcard && oldpassword==password)
{
password = newpassword;
}
}
}
//住类
class RunBank //这个类和上一个Bank要在同一文件夹下(同一个包中)
{
public static void main(String[] args)
{
//账号 姓名 身份证 密码 余额
Bank user1 = new Bank("12345678","张三","12345678","642987",10000);
Bank user2 = new Bank("22345678","李四","22345678","713865",20000);
System.out.println(user1.name+"的余额是:"+user1.getMoney("12345678","12345678"));
System.out.println(user1.name+"取款了"+user1.drawMoney("22345678","642987",2000));
System.out.println(user2.name+"存款了"+user2.saveMoney("22345678",1000));
user2.changePassword("22345678","713865","234567");
System.out.println("修改密码已经完成!");
}
}
运行的结果是
张三的余额是10000.0
张三取款了2000.0
李四取款了1000.0
修改密码已经完成