从对象说起
首先了解到java语言是一种面向对象的语言,那什么叫面向对象呢?可以这么
理解,java首先是为对象服务的,我的电脑,我的鼠标都是一个对象,首先从对象入手,就要先对对象来分类,这就引入了类的概念,我的电脑属于电脑类,我的鼠标属于鼠标类。这就将对象分好了类。
接着要为对象服务,首先就要描述一个对象,描述对象我们从这几个方面入手。
第一就是对象的特征,我们在java中称呼它为属性,第二就是对象的功能,在java中我们称呼它为方法。举个
例子,我们从电脑来看。
特征(属性):名字 ,外观,颜色,配置,型号。。。。。。
功能(方法):
开机,上网,关机,画画。。。。。
这样就把一个对象给描述完成了,而java就是通过描述对象来实现对对象的服务机制。我们可以看到java通过对象的属性和方法来将对象分类。程序中的类就是根据生活中的对象或者类进行的一种定义。
然后我们开始进入java语言学习,我们从大到小,先从类入手,先从编译器中创建一个类,注意的是类名要大写,然后是访问修饰符(private,public,protected,默认的)
格式为 public
class 类名{
访问修饰符 数据类型 属性名;
访问修饰符 返回值数据类型 方法名(数据类型 参数名,...){
//方法体
}
}
注意的是类名之中不能有符号只能是字母,数字和下划线。
在说说类中的东西,看接下来一段代码:
public class lin
{
private String name;
private int HP;
private int GJL;
private int FYL;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setHP(int HP){
this.HP=HP;
}
public int getHP(){
return HP;
}
public void setGJL(int GJL){
this.GJL=GJL;
}
public int getGJL(){
return GJL;
}
public void setFYL(int FYL){
this.FYL=FYL;
}
public int getFYL(){
return FYL;
}
public void attack(lin a){
a.HP=a.HP-this.GJL;
}
public void attack(lin a,lin b){
a.HP=a.HP-this.GJL+a.FYL;
}
首先注意到属性的访问修饰符都是private,这样定义的属性只能在当前的类中调用,如果要在其他类中调用,就要设置两种方法来调用,以name属性为例,看下面一段代码:
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
其中void表示空的数据类型,一般在没有返回值的函数中用到,为了可以在其他类中调用这个类中的属性,添加两个方法,set和get,这样观察以下一段代码:
aa.setHP(10000);
if(aa.getHP()>0 && bb.getHP()>0)
这是从主函数中截取的两段代码,这样就可以调用其他类中的属性了。
继续刚才那段代码,我们注意到this这个
关键字,this关键字的用途广泛,主要是当一个对象调用一个函数时,this就表示调用函数的那个对象。具体情况以后会具体分析。
然后说到类中一个很重要的东西,构造方法,首先我们要先了解方法分为两类,分别是构造方法和普通方法,上面所提到的像setName,getName,都是普通方法,对于构造方法,要注意构造方法的格式如下:
访问修饰符 构造方法名(数据类型 参数名,...){
//方法体
}
类中未定义构造方法时,java会默认提供一个构造方法(不带任何参数的构造方法)。
如果类中定义了构造方法,则默认的构造方法会被覆盖掉,不能使用默认的了,只能使用你自己定义的构造方法.
作用:
1.给属性赋值
2.实例化对象
区别:
1.构造方法的是不需要定义返回值数据类型,普通方法必须要定义返回值数据类型。
2.构造方法的名字必须要和类名完全一致,普通方法的名字可以任意定义(不能是关键字)。
3.构造方法时用来是实例化对象,普通方法用来表示对象的行为.
特别注意1.构造方法的名字一定要和类名一致。2.构造方法是用来实例化对象的,也只有它能够实例化对象。3.自己没有定义是系统会默认一个构造方法。
还是观察下面一段代码:
public void attack(lin a){
a.HP=a.HP-this.GJL;
}
public void attack(lin a,lin b){
a.HP=a.HP-this.GJL+a.FYL;
我们
发现者两个方法的名字一样但是里面的参数不一样,可以看出调用时只要参数设置不同就能得到两个方法,这个叫做方法的
重载:
实现方法重载的条件:
1.方法名必须要完全一致;
2.方法所带的参数个数、参数类型、参数顺序至少要有一个是不同的。
怎样调用呢?
根据参数的不同来决定调用不同的方法.
好了我们已经知道如何去定义类了,在类中你可以添加类的属性和方法,当然就像小说一样,只有人物还是不够的,还需要剧情,所以我们还需要一个程序入口,也就是主函数,在主函数中你可以调用各个你编译好的类中的对象,属性,方法,来描述对象,接下来就说说如何实例化对象和调用方法。
类名 对象名 = new 类名();
对象名.方法名(参数值,...);
这是在java中在主函数中调用方法和实例化对象的格式,不同类中的不同属性方法在主函数中通过
循环嵌套等语句结构,就可以完成你想写的程序了。下面附上我的练习成果:
public class Linhaoxiang
{
public static void main(String[] args)
{
//定义名字
lin aa = new lin();
lin bb = new lin();
lin cc = new lin();
//定义属性
aa.setName("迪迦奥特曼");
bb.setName("小怪兽");
cc.setName("Boss");
aa.setHP(10000);
bb.setHP(5000);
cc.setHP(8000);
aa.setGJL(1500);
bb.setGJL(1300);
cc.setGJL(1000);
cc.setFYL(500);
//while循环
if(aa.getHP()>0 && bb.getHP()>0){
aa.attack(bb);
System.out.println(bb.getName()+"的血量是"+bb.getHP());
bb.attack(aa);
System.out.println(aa.getName()+"的血量是"+aa.getHP());
}
if(aa.getHP()>0){
System.out.println("奥特曼赢了,可是Boss出现了");
}
else{
System.out.println("小怪兽赢了");
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
while(aa.getHP()>0&&cc.getHP()>0){
aa.attack(cc,cc);
System.out.println(cc.getName()+"的血量是"+cc.getHP());
cc.attack(aa);
System.out.println(aa.getName()+"的血量是"+aa.getHP());
}
//if
if(aa.getHP()>0){
System.out.println("迪迦闯关成功");
}
else{
System.out.println("迪迦闯关失败");
}
}
}
[b][/b]