一、对象
1.对象的概念:
对象并不只是存在于java的,它只是一种概念,在生活中,只要是一个具体的物体或者一件具体的事情就是一个对象。例如:某个人、某一辆车、某台电脑,这都是一个对象。
这里需要注意的是对象一定要是一个具体的事物,而例如人、车,这种没有具体的指代,就不能算一个对象。
2.对象的描述:
如何描述一个对象?我们需要从两方面进行描述:特征(属性)和行为(方法)
例如:对于某一台电脑这个对象:1.特征:形状,大小,重量,品牌,型号,CPU,内存,显卡,硬盘,...;2.行为:上网,玩游戏,学习,播放电影,...
二、类
1.类的组成:
生活中的类:根据对象相似的特征和相似的行为进行归类。例如:桌子、椅子
程序中的类 :由两个部分组成:1.属性(成员变量) ;2.方法(成员函数)
2.类的基本格式:
public class 类名 { 访问修饰符 数据类型 属性名; 访问修饰符 返回值类型 方法名(数据类型 参数名,...){ //代码 } }
3.实例化对象和调用方法的格式:
实例化对象的格式:
实例化对象的关键字:new
类名 对象名 = new 构造方法(参数值,...);
参数值可以为空
调用方法的格式:
对象名.方法名(参数值,...);
举例1:
现在设置这样一个情景:学生张三(已有20学分)选修了一门Java课程,学完该课程后,学分要加3分。
下面我们先来分析一下:
1.对象:
张三
特征:姓名,学分 行为:学习(Java)
Java课程
特征:学分,课程名,课时 行为:无
2.根据类的格式定义学生和课程类。
3.实例化对象:
Student stu = new Student();
Classes cla = new Classes();
//定义Student类 public class Student { //声明属性 private String name;//姓名属性 private int score;//学分属性 //定义设置课程名属性值的方法 public void setName(String n){ name = n; } //定义获取课程名属性值的方法 public String getName(){ return name; } //定义设置学分属性值的方法 public void setScore(int s){ score = s; } //定义获取学分属性值的方法 public int getScore(){ return score; } //定义学习课程的方法Classes是类名 cla是参数名对象名 public void study(Classes cla){ System.out.println(name+"正在学习"+cla.getName()+"课程!"); //得到课时 int time = cla.getTime(); //减少课时 time--; //将减少后的值设置给课程对象 cla.setTime(time); //判断是否已经学完所有课时 if(cla.getTime() <= 0){ System.out.println(name+"已经学完"+cla.getName()+"课程。"); //让学生的学分加上课程的学分。 score= score+cla.getScore(); } } }
//定义课程类 public class Classes { private String name;//课程名属性 private int score;//学分属性 private int time;//课时属性 //定义设置课程名属性值的方法 public void setName(String n){ name = n; } //定义获取课程名属性值的方法 public String getName(){ return name; } //定义设置学分属性值的方法 public void setScore(int s){ score = s; } //定义获取学分属性值的方法 public int getScore(){ return score; } //定义设置课时属性值的方法 public void setTime(int t){ time = t; } //定义获取课时属性值的方法 public int getTime(){ return time; } }
//定义管理学生学习课程的类 public class Manager { //定义程序的入口主函数 public static void main(String [] args){ //实例化Student类的对象 Student stu = new Student(); //设置对象的姓名属性值 stu.setName("张三"); //设置对象的学分属性值 stu.setScore(20); //实例化Classes类的对象 Classes cla = new Classes(); cla.setName("Java");//设置课程名 cla.setScore(3);//设置学分 cla.setTime(10);//设置课时 for(int i=0;i<10;i++){ //调用学生学习课程的方法 stu.study(cla); } System.out.println(stu.getName()+"现在的学分是"+stu.getScore()); } }
以上程序的执行结果为
张三正在学习java课程! 张三正在学习java课程! 张三正在学习java课程! 张三正在学习java课程! 张三正在学习java课程! 张三正在学习java课程! 张三正在学习java课程! 张三正在学习java课程! 张三正在学习java课程! 张三正在学习java课程! 张三已经学完java课程。 张三现在的学分是23
举例2:
奥特曼和小怪兽进行PK,直到一方的血量为0 时,结束战斗输出谁胜利了。
//定义People类 public class People { //声明属性 private String name;//姓名属性 private int blood;//血量属性 //定义设置People名属性值的方法 public void setName(String n){ name = n; } //定义获取People名属性值的方法 public String getName(){ return name; } //定义设置血量属性值的方法 public void setBlood(int b){ blood = b; } //定义获取血量属性值的方法 public int getBlood(){ return blood; } //定义打小怪兽的方法 public void hit(Monster mon){ System.out.println(name+"对"+mon.getName()+"进行攻击!"); int blood = mon.getBlood();//得到血量 blood-=2;//减少血量 mon.setBlood(blood);//将减少后的血量值设置给怪兽对象 if(mon.getBlood()<=0){ System.out.println(name+"胜利了!"); } } }
//定义monster类 public class Monster{ private String name;// Monster名属性 private int blood;//血量属性 //定义设置Monster名属性值的方法 public void setName(String n){ name = n; } //定义获取Monster名属性值的方法 public String getName(){ return name; } //定义设置血量属性值的方法 public void setBlood(int b){ blood = b; } //定义获取血量属性值的方法 public int getBlood(){ return blood; } //定义打奥特曼的方法 public void hit(People peo){ System.out.println(name+"对"+peo.getName()+"进行攻击!"); int blood = peo.getBlood(); blood--;//减少血量 peo.setBlood(blood);//将减少后的血量值设置给People对象 if(peo.getBlood()<=0){ System.out.println(name+"胜利了!"); } } }
//定义管理类 public class Manager{ //定义程序的入口函数 public static void main(String [] args){ People peo = new People();//实例化People类的对象 peo.setName("奥特曼");//设置对象的姓名属性值 peo.setBlood(10);//设置对象的血量属性值 Monster mon = new Monster();//实例化Monster类的对象 mon.setName("小怪兽");//设置对象的姓名属性值 mon.setBlood(10);//设置对象的血量属性值 while (mon.getBlood()>0 && peo.getBlood()>0) { mon.hit(peo); peo.hit(mon); } System.out.println(mon.getName()+"现在的血量是"+mon.getBlood()); System.out.println(peo.getName()+"现在的血量是"+peo.getBlood()); } }
以上程序的执行结果为:
小怪兽对奥特曼进行攻击! 奥特曼对小怪兽进行攻击! 小怪兽对奥特曼进行攻击! 奥特曼对小怪兽进行攻击! 小怪兽对奥特曼进行攻击! 奥特曼对小怪兽进行攻击! 小怪兽对奥特曼进行攻击! 奥特曼对小怪兽进行攻击! 小怪兽对奥特曼进行攻击! 奥特曼对小怪兽进行攻击! 奥特曼胜利了! 小怪兽现在的血量是0 奥特曼现在的血量是5
三、构造方法
以上程序我们都是用的普通方法,但有时候我们需要用到构造方法
△.构造方法也称为构造函数或构造器。
1.基本格式:
访问修饰符 构造方法名(数据类型 参数名,...){ //代码 }
而上面的普通方法的格式为:
访问修饰符 返回值类型 方法名(数据类型 参数名,...){ //代码 } }
我们可以看出,在格式上,构造方法与普通方法的区别在于其少了返回值类型。
△.注意:构造方法名必须要和类名完全一致。这也是其与普通方法不同的地方。
2.用途:
Java如果要创建一个对象,就必须要使用构造方法,否则对象无法创建。那么为什么前面我们没用到构造方法,也创建了对象呢?这是因为如果你没有自定义构造方法,Java就会给每一个类提供一个默认不带参数的构造方法;而一旦你自己定义了构造方法,则默认的构造方法会被覆盖,无法再继续使用。
构造方法还有一个用途就是传参数,如果之前声明了参数,那么在实例化对象的时候,可以将参数传过来,即:
类名 对象名 = new 构造方法(参数);
这在之后的例子中会演示到。
3.方法重载:
概念:方法重载是指在一个类中定义多个同名的方法。
条件:a.方法名必须要完全一致;b.方法所带的参数个数,参数类型,参数顺序必须要有一个不同。(这是因为主程序在调用方法时,是根据参数的区别来调用的)
使用时机:当一个对象会产生不同参数的方法时使用,
例如:学生的学习方法不止一个,可以自己看书,可以上课等等。即:
public void study(Book bk){ //代码 } public void study(Course cos){ //代码 }
举例:
奥特曼和小怪兽以及Boss进行PK,直到一方的血量为0时,结束战斗谁出谁胜利了。
//定义People类 public class People { private String name; private int blood; public People (String name,int blood){ this.name=name; this.blood=blood; } //定义设置People名属性值的方法 public void setName(String n){ name=n; } //定义获取People名属性值的方法 public String getName(){ return name; } //定义设置血量属性值的方法 public void setBlood(int b){ blood = b; } //定义获取血量属性值的方法 public int getBlood(){ return blood; } //定义打小怪兽的方法 public void hit(Monster mon){ System.out.println(name+"对"+mon.getName()+"进行攻击!"); int blood = mon.getBlood();//得到血量 blood-=2;//减少血量 mon.setBlood(blood);//将减少后的血量值设置给怪兽对象 if(mon.getBlood()<=0){ System.out.println(name+"胜利了!"); } } //定义打boss的方法 public void hit(Boss bs){ System.out.println(name+"对"+bs.getName()+"进行攻击!"); int blood = bs.getBlood();//得到血量 blood-=1;//减少血量 bs.setBlood(blood);//将减少后的血量值设置给怪兽对象 if(bs.getBlood()<=0){ System.out.println(name+"胜利了!"); } } }
//定义Monster类 public class Monster { private String name; private int blood; public Monster (String name,int blood){ this.name=name; this.blood=blood; } //定义设置Monster名属性值的方法 public void setName(String n){ name = n; } //定义获取Monster名属性值的方法 public String getName(){ return name; } //定义设置血量属性值的方法 public void setBlood(int b){ blood = b; } //定义获取血量属性值的方法 public int getBlood(){ return blood; } //定义打奥特曼的方法 public void hit(People peo){ System.out.println(name+"对"+peo.getName()+"进行攻击!"); int blood = peo.getBlood(); blood--;//减少血量 peo.setBlood(blood);//将减少后的血量值设置给People对象 if(peo.getBlood()<=0){ System.out.println(name+"胜利了!"); } } }
//定义boss类 public class Boss { private String name; private int blood; public Boss (String name,int blood){ this.name=name; this.blood=blood; } //定义设置Boss名属性值的方法 public void setName(String n){ name = n; } //定义获取Monster名属性值的方法 public String getName(){ return name; } //定义设置血量属性值的方法 public void setBlood(int b){ blood = b; } //定义获取血量属性值的方法 public int getBlood(){ return blood; } //定义打奥特曼的方法 public void hit(People peo){ System.out.println(name+"对"+peo.getName()+"进行攻击!"); int blood = peo.getBlood(); blood--;//减少血量 peo.setBlood(blood);//将减少后的血量值设置给People对象 if(peo.getBlood()<=0){ System.out.println(name+"胜利了!"); } } }
//定义管理类 public class Manager { public static void main(String[] args) { // TODO Auto-generated method stub People peo=new People("奥特曼",20); Monster mon=new Monster("小怪兽",10); Boss bs=new Boss("大魔王",30); while (mon.getBlood()>0 && peo.getBlood()>0) { mon.hit(peo); if ( peo.getBlood()>0) peo.hit(mon); } while (bs.getBlood()>0 && peo.getBlood()>0){ bs.hit(peo); if ( peo.getBlood()>0) peo.hit(bs); } System.out.println(mon.getName()+"现在的血量是"+mon.getBlood()); System.out.println(peo.getName()+"现在的血量是"+peo.getBlood()); System.out.println(bs.getName()+"现在的血量是"+bs.getBlood()); } }
运行结果为:
小怪兽对奥特曼进行攻击! 奥特曼对小怪兽进行攻击! 小怪兽对奥特曼进行攻击! 奥特曼对小怪兽进行攻击! 小怪兽对奥特曼进行攻击! 奥特曼对小怪兽进行攻击! 小怪兽对奥特曼进行攻击! 奥特曼对小怪兽进行攻击! 小怪兽对奥特曼进行攻击! 奥特曼对小怪兽进行攻击! 奥特曼胜利了! 大魔王对奥特曼进行攻击! 奥特曼对大魔王进行攻击! 大魔王对奥特曼进行攻击! 奥特曼对大魔王进行攻击! 大魔王对奥特曼进行攻击! 奥特曼对大魔王进行攻击! 大魔王对奥特曼进行攻击! 奥特曼对大魔王进行攻击! 大魔王对奥特曼进行攻击! 奥特曼对大魔王进行攻击! 大魔王对奥特曼进行攻击! 奥特曼对大魔王进行攻击! 大魔王对奥特曼进行攻击! 奥特曼对大魔王进行攻击! 大魔王对奥特曼进行攻击! 奥特曼对大魔王进行攻击! 大魔王对奥特曼进行攻击! 奥特曼对大魔王进行攻击! 大魔王对奥特曼进行攻击! 奥特曼对大魔王进行攻击! 大魔王对奥特曼进行攻击! 奥特曼对大魔王进行攻击! 大魔王对奥特曼进行攻击! 奥特曼对大魔王进行攻击! 大魔王对奥特曼进行攻击! 奥特曼对大魔王进行攻击! 大魔王对奥特曼进行攻击! 奥特曼对大魔王进行攻击! 大魔王对奥特曼进行攻击! 大魔王胜利了! 小怪兽现在的血量是0 奥特曼现在的血量是0 大魔王现在的血量是16
这个例子中我们在People、Monster和Boss类里面都用了带参数的构造方法(两个参数:名字、血量), 在People类里面,对于hit方法用到了方法的重载(参数类型不同)。
△.给参数赋值的时候,用到了this.name=name和this.blood=blood,因为当参数名和属性名一致时,根据Java的规则,会优先使用最近的参数,这样参数赋给参数就和属性没有关系。所以这里用this.属性名,来表示这个是一个属性。这是this的一个用法,关于this的其他用法这里就不具体介绍了。
相关推荐
java基础+面向对象+构造方法实例化
内容概要: 本文详细介绍了Java中的构造方法概念,并通过一个示例演示了如何使用构造方法来创建对象和初始化对象的属性。读者将学习构造方法的定义、作用和使用方式,并掌握在类的实例化过程中自动调用构造方法的...
9.java学习第九章——对象的创建和使用+构造方法+方法重载——作业的形式:创建对象在JVM中的存储状态(内存图).pdf
通过这个视频可以简单的学习JAVA基础程序设计,学习JAVA构造方法与匿名对象,简单的JAVA程序编写,JAVA免费程序学习
构造方法:类名() 特点:方法名和类名相同,没有返回值类型 public Person(){ private String name; public void setName(String name){ this.name = name; } } public static void main(){ Person p = new...
1、实验专题“类和对象基础”中“代码6:InitOrder.java”的问题: 如果L20处,我们这样改为:“C myc = new C(2);” 试问,myc这个C类对象变量所在空间在什么区域?画一个示意图描述。2、定义一个三角形类Triangle...
* 执行启动类的main函数 -> 创建对象的继承树从高到底的类层次中的静态块(如果已经被执行过,则不会重复执行) -> * 继承树中的从最高层开始的实例语句块{}、然后对应的构造函数、以及构造函数中调用的方法 * ...
(1)类和对象 类:被class关键字修饰叫做类。...6.根据类创建对象(说明:调用无参、有参构造方法创建对象) (7)java语言类型的分类 基本数据类型:8个 类类型/引用类型:其它 (8)基本类型和引用类型区别 基本类
面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程 强调的是功能行为 面向对象 将功能封装进对象,强调具备了功能的对象。 面向对象是基于面向过程的。
Java 基础之面向对象编程教程,主要类和对象、如何定义类、成员函数、访问控制修饰符、构造方法、类变量、类方法、方法重载、方法覆盖、抽象、封装、继承、多态、抽象类、接口和New 运算符等概念的介绍和例题介绍...
它允许程序在运行时获取类的信息并操作类或对象的属性、方法和构造函数等。通过反射机制,可以实现很多高级特性,如动态代理、注解处理和框架的设计等。 适用人群 适用于有一定Java编程基础的开发人员,希望了解和...
面向对象方法,面向对象的方法)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO (Object-Oriented)方法,是建立在"对象"概念基础上的方法学。对象是由数据和容许的操作组成的封装体,...
动力节点的Java课程适合绝对零基础的观看,教程中讲解了Java开发环境搭建、Java的基础...适合非计算机专业,想转行做Java开发的朋友,或者想让Java基础更扎实的小伙伴,配套资料下载:http://www.bjpowernode.com/?csdn
获取类的 Class 对象构造类的实例化对象获取-个类的所有信息 获取类中的变量(Field) 获取类中的方法(Method) 获取类的构造器(Constructor) 获取注解 通过反射调用方法反射的应用场景 Spring 的 IOC 容器反射 + 抽象...
自定义异常类MyException,该类继承自Exception类,类中只有含一个字符串参数msg的构造方法,构造方法中只有一条语句super(msg)——调用父类的构造方法。另外,编写自定义类person,类中只有两个私有的变量,一个是...
※在所有类成员初始化完成之后,才调用本类的构造方法创建对象。 构造方法的作用就是初始化。 (2) 静态对象的初始化 程序中主类的静态变量会在main方法执行前初始化。 不仅第一次创建对象时,类中的所有静态变量...
类的构造方法的作用是什么? 如果一个类没有声明构造方法,该程序能正确执行吗? 构造方法有哪些特点?是否可被 override? 面向对象三大特征 封装 继承 多态 接口和抽象类有什么共同点和区别? 深拷贝和浅拷贝区别了解...
这是一些涉及Java类和对象基础实例源码集,里面有日历的测试、将三个员工对象的数据赋值给职工数组、打印输出关于人类的基本信息、传递信息到父类构造函数、掷一个六面骰子6000次的程序,计算结果的概率、调用静态...
中期回顾 类、构造方法(共18页).ppt 优质java课件 java程序设计教程(第6版)05.深入的条件判断和循环(共28页).ppt 优质java课件 java程序设计教程(第6版)05.条件和循环语句(共58页).ppt 优质java课件 java...