1.问题的提出
     张老太养了两只猫猫:一只名字叫小白,今年3岁,白色。还有一只叫小花,今年100岁,花色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色。如果用户输入的小猫名错误,则显示张老太没有这只猫。

//用前面学习过的知识写出代码如下:

public class Demo107{
public static void main(String []args){
int a=49;//输入的名字49,50
int cat1age=3; //第一只猫
String cat1name="小白";
String cat1color="白色";
int cat2age=100; //第二只猫
String cat2name="小花";
String cat2color="花色";
switch(a){
case '1':
System.out.println(cat1age+cat1color);
break;
case '2':
System.out.println(cat2age+cat2color);
break;
default:
System.out.println("张老太没有这只猫!");
}
}
}

//用面向对象思想解决,代码如下:

//主函数
public class Demo105{
public static void main(String []args){
//创建一个猫对象
Cat cat1=new Cat();//Cat是定义的一个数据类型
//cat1=new Cat(); 等同于 Cat cat1=new Cat();
//访问属性的 对象名.属性名字
cat1.age=3;
cat1.name="小白";
cat1.color="白色"; //创建第二只猫
Cat cat2=new Cat();
cat2.age=100;
cat2.name="小花";
cat2.color="花色";
}
}
//java中[类名的首写字母大写]可根据程序的需要定义类
//定义猫类
class Cat{
//下面的就是类的成员变量/属性
int agr;
String name;
String color;
Master myMaster;
}
//引用类型,比如建个主人类
class Master{
int age;
String name;
String address;
}

说明:对比看来,传统方法显然很麻烦,需要定义很多变量,且变量之间没有内在的联系。因此,使用面向对象技术,把猫的特性提取出来-->猫类,然后再实例化对象。不同的猫拥有共同的属性,只是属性值不一样。如此编程,完全符合我们思维的一般逻辑,且代码简练易读。

2.类和对象的区别与联系
       (1)、类是抽象的,概念的,代表一类事物,比如人类,猫类..
       (2)、对象是具体的,实际的,代表一个具体事物
       (3)、类对象的模板,对象是类的一个个体,实例
      3.如何定义类
     一个全面的类定义比较复杂,如:

package 包名;
class 类名 extends 父类 implements
接口名{
成员变量;
构造方法;
成员方法;
}

要透彻的掌握类,必须要了解类的构成,下面由简单到复杂逐步完善类的定义:

class 类名{    // ---->   待定...

  成员变量;

}

类的成员变量是类的一个组成部分,一般是基本数据类型,也可是引用类型。比如我们前面定义猫类的int age 就是成员变量。

4.如何创建对象
      创建一个对象有两种方法
      1、先声明再创建
           a.对象声明
                 类名  对象名;
          b.对象创建
                对象名 = new  类名();
       2、一步到位法
               类名 对象名=new  类名()
      另外、对象访问(使用)对象的成员变量的格式一般是:  对象名.变量名; (注加下控制符此表达就不准确了)对象总是存在内存中的!
例:定义一个人类(Person)(包括名字、年龄),用一步到位法去创建一个对象

//定义个人类
class Person{
int age;
String name;
}

使用个人类:

Person1 a=new Person1();//用一步到位法去创建一个对象
a.age=10;
a.name="小明";
Person1 b; //创建对象b
b=a;
System.out.println(b.name);//输出“小明”
b.age=200;
System.out.println(a.age);//输出a.age为200

5.类--成员方法

在某些情况下,我们要需要定义成员方法。比如人类:除了有一些属性外(成员变量表示的年龄、姓名等),我们人类还有一些行为比如:可以说话、跑步..,通过学习,我们人类还可以做算术题。这时就要用成员方法才能完成。

现在要求对Person类完善:(1)添加speak成员方法,输入出:我是一个好人(2)添加jisuan成员方法,可以计算从1+..+1000的结果(3)修改jisuan成员方法,该方法可以接收一个数n,计算从1+..+n的结果(4)添加add成员方法,可以计算两个数的和。

类的成员方法(成员函数)定义:成员方法也叫成员函数,这里希望大家不要被两个名词搞晕了。

public 返回数据类型方法名(参数列表)
{
语句;//方法(函数)主体
}

说明:

a.参数列表:表示成员函数输入

b.数据类型(返回类型):表示成员函数输出

c.函数主体:表示为了实现某一功能代码块

案例:类方法的调用[Demo108.java]

public class Demo108{
public static void main(String []args){
Person p1=new Person();
p1.speak();//调用speak方法
p1.jiSuan();//调用计算方法
p1.jiSuan(200);//调用可以传入参数的计算方法
p1.add(12,10);//调用两个数的和 int res=p1.add2(23,34);//调用两个数的和并返回值到res中
System.out.println("res返回值是:"+res);
System.out.println("num1+num2+num3="+p1.add3(2,2.3f,4.5f));//返回类型一定要一致否则报错
}
}

补充:定义名字的几个方法:

1、驼峰法 如myCry;2、下划线法my_cry

方法名在有不同参数的情况下可以使用同一个方法名,即有参数和没参数的方法可以同名。

下面定义Person类:

class Person{ //请注意类名首写字母应为大写如Person为类名
int age;
String name;
//1、可以输出我是好人方法
public void speak(){ //请注意方法名的首写字母应为小写如speak为方法名
System.out.println("我是一个好人");
}
//2、可以计算1+..+1000的方法
public void jiSuan(){
int result=0;
for(int i=1;i<=1000;i++){
result=result+i;
}
System.out.println("1+..+1000结果是"+result);
}
//3、带参数的成员方法,可以输入n值并计算1+..+n
public void jiSuan(int n){
int result=0;
for(int i=1;i<=n;i++){
result+=i;
}
System.out.println("1+..+n结果是"+result);
}
//4、计算两个数的和
public void add(int num1,int num2){
int result=0; //与下面一句等同于return num1+num2;
result=num1+num2;
System.out.println("num1+num2="+result);
}
//5、计算两个数的和,并将结果返回给主调(调用它的)函数
//注意:返回类型和返回结果的类型要一致
//注意:在调用某个成员方法的时候,给出的具体数值的个数
//和类型要相匹配。
public int add2(int num1,int num2){
return num1+num2;
}
//6、计算两个float数的和,并将结果返给主调函数
public float add3(int num1,float num2,float num3){
return num1+num2+num3;
}
}

类的成员方法声明,格式为:

访问修饰符 数据类型 函数名(参数列表);

例:

    public int test(int a);/*方法声明*/

在给Person类添加add方法的例题中,我们看到的关键字return,它的功能是把表达式的值返回的值返回给主调函数的方法。

return 表达式;

类的成员方法(函数)--特别说明

1、方法的参数列表可以是多个,并且数据类型可以是任意的类型int float double char等。

访问修饰符 返回数据类型 函数名(参数列表){
语句; //函数主体
}

2、方法的返回类型可以是任意的数据类型(int,float,double,char..)也可以没有返回值void表示没有返回值。

访问修饰符 返回数据类型 函数名(形参列表){
语句; //函数主体
}

案例1:编写一个成员函数,从键盘输入一个整数(1-9),打印出对应的乘法表[Demo110.java]

//实例键盘输入打印乘法表[Demo110.java]
import java.io.*;
public class Demo110{
public static void main(String []args){
Cfb jiu=new Cfb();
jiu.cf();
}
}
class Cfb{
public void cf(){
try{
//输入流,从键盘接收数
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
//给出提示
System.out.println("请输入1-9,按0退出:");
//从控制台读取一行数据
String a1=br.readLine();
//把String转为int
int num1=Integer.decode(a1);
for(int i=1;i<=num1;i++){
for(int j=1;j<=i;j++){
System.out.print(i+"×"+j+"="+(i*j)+"\t");
}
System.out.println();
}
}catch(Exception e){
e.printStackTrace();
}
}
}

案例2:设计计算机类,要求如下:[Demo109.java]

属性:品牌(Brand)、颜色(Color)、cpu型号(CPU)、内存容量(Memory)、硬盘大小(Harddisk)、价格(Price)、工作状态(Work)

方法:打开(Open)、关闭(Close)、休眠(Sleep)

创建一个计算机对象,调用打开,关闭方法。

//计算机类与对象的代码
import java.io.*;//加载IO流包
public class Demo109{
public static void main(String []args){
Computer Pc=new Computer();
Pc.Brand="品牌";
Pc.Color="颜色";
Pc.Cpu="Cpu型号";
Pc.Memory="内存容量";
Pc.Hd="硬盘容量";
Pc.Price="价格";
Pc.Work="工作状态";
try{
//输入流,从键盘接收数
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
//给出提示
System.out.println("请输入0-9控制机器");
//从控制台读取一行数据
String a1=br.readLine();
//把String转为float
float num1=Float.parseFloat(a1);
if(num1==0){Pc.open();}
else if(num1==1){Pc.close();}
else if(num1==2){Pc.sleep();}
else if(num1==3){System.out.println(Pc.Brand);}
else if(num1==4){System.out.println(Pc.Color);}
else if(num1==5){System.out.println(Pc.Cpu);}
else if(num1==6){System.out.println(Pc.Memory);}
else if(num1==7){System.out.println(Pc.Hd);}
else if(num1==8){System.out.println(Pc.Price);}
else if(num1==9){System.out.println(Pc.Work);}
else {System.out.println("输入错误!");}
}catch(Exception e){
e.printStackTrace();
}
}
} class Computer{
String Brand;
String Color;
String Cpu;
String Memory;
String Hd;
String Price;
String Work;
public void open(){
System.out.println("开机");
}
public void close(){
System.out.println("关机");
}
public void sleep(){
System.out.println("休眠");
}
}

至此,类的定义便可完善一步:

class 类名{
     成员变量; 
     成员方法;
}

java面向对象编程(一)-类与对象的更多相关文章

  1. java面向对象编程(类、对象)

    一.面向对象编程概述面向对象编程(Object  Oriented  Programming,缩写为OOP)是当今最流行的程序设计技术,它具有代码易于维护.可扩展性好和代码可常用等优点.面向对象的设计 ...

  2. day24:面向对象设计与面向对象编程、类和对象

    一.三大编程范式: 面向过程: 面向函数: 面向对象: 二.程序的进化论: 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比方说,你定 ...

  3. 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法

    1.面向过程编程 面向过程:一种编程思想在编写代码时 要时刻想着过程这个两个字过程指的是什么? 解决问题的步骤 流程,即第一步干什么 第二步干什么,其目的是将一个复杂的问题,拆分为若干的小的问题,按照 ...

  4. ES6学习笔记(一):轻松搞懂面向对象编程、类和对象

    目录 面向过程编程P OP(Process oriented programming) 面向对象编程OOP(Object Oriented Programming) 总结 @ 面向过程编程P OP(P ...

  5. Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量

    1 第一个OC控制台程序 1.1 问题 Xcode是苹果公司向开发人员提供的集成开发环境(非开源),用于开发Mac OS X,iOS的应用程序.其运行于苹果公司的Mac操作系统下. 本案例要求使用集成 ...

  6. java面向对象编程——第五章 对象的行为

    5.1 方法调用栈 当一个方法被调用时,将导致控制流程跳转到被调用的方法.然后,控制流程执行方法中的语句.当然,被执行的方法可能会调用其它方法,导致控制流程跳转到其它方法.所有的方法调用都维护在一个称 ...

  7. Java面向对象 练习(类、对象、方法)

    知识点:构造方法.继承.方法重载.方法重写 一. 定义一个点(Point)类,用来表示三维空间中的点(有三个坐标),要求如下: 1.可以生成具有特定坐标的点对象(构造方法): 2.提供可以设置三个坐标 ...

  8. LY.JAVA面向对象编程.工具类中使用静态、说明书的制作过程、API文档的使用过程

    2018-07-08 获取数组中的最大值 某个数字在数组中第一次出现时的索引 制作说明书的过程 对工具类的使用 获取数组中的最大值 获取数字在数组中第一次出现的索引值 API的使用过程 Math

  9. 1903021121-刘明伟-java十一周作业-java面向对象编程

    项目 内容 课程班级博客链接 19级信计班(本) 作业要求链接 第十一周作业 博客名称 1903021121-刘明伟-java十一周作业-java面向对象 要求 每道题要有题目,代码(使用插入代码,不 ...

随机推荐

  1. 彻底理解Netty,这一篇文章就够了

    Netty到底是什么 从HTTP说起 有了Netty,你可以实现自己的HTTP服务器,FTP服务器,UDP服务器,RPC服务器,WebSocket服务器,Redis的Proxy服务器,MySQL的Pr ...

  2. nginx ssl 卸载功能 第八章

    一 .证书自签发和给web 服务签发证书 .ssl 证书加密文件 ****************************** 建立私有CA openCA openssl 证书申请及签署步骤 .生成证 ...

  3. Python RabbitMQ消息分发轮询

    1.收消息:一对多,默认依次轮询的发给每个消费端. 2.消息确认:默认RabbitMQ不会设置no_ack=Ture,意思是,当生产者给消费者发送发送消息时,消费者处理这个消息,处理完后会手动确认发送 ...

  4. DataFrame 行列数据的筛选

    一.对DataFrame的认知 DataFrame的本质是行(index)列(column)索引+多列数据. DataFrame默认索引是序号(0,1,2…),可以理解成位置索引. 一般我们用id标识 ...

  5. Greeting Card

    问题 G: Greeting Card 时间限制: 1 Sec  内存限制: 128 MB 提交: 666  解决: 59 [提交] [状态] [命题人:admin] 题目描述 Quido plans ...

  6. promise封装的ajax

    var  myNewAjax=function(url){ return new Promise(function(resolve,reject){ var xhr = new XMLHttpRequ ...

  7. (转) Ensemble Methods for Deep Learning Neural Networks to Reduce Variance and Improve Performance

    Ensemble Methods for Deep Learning Neural Networks to Reduce Variance and Improve Performance 2018-1 ...

  8. 牛客练习赛26—D xor序列 —线性基

    这是我第一次写关于线性基的题目.其实这题很好理解,先把给出的数能异或出的值给存在p数组里面,p[i]代表着该异或出的数的最高位为第i位且为1. 求出来后,再把x,y处理下,然后直接一位一位的判断是否为 ...

  9. 基于 arduino 的低功耗无线传感结点设计

    发送端 仿真图: *仿真图中使用使用TMP传感器(LM34)代替实际使用的DHT11传感器. 连接方式: DHT11的正极(VCC)与5V电源接口连接 DHT11的负极(GND)与GND连接 DHT1 ...

  10. URI和URL之间的区别

    URI的全称为统一资源标识符(Uniform Resource Identifier),是一个用于标识某一互联网资源名称的字符串. 该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交 ...