zoukankan      html  css  js  c++  java
  • 0007面向对象的编程思想、类与对象的概念、类的成员、类的声明与对象的创建以及属性、方法的使用

     

    /*
    面向对象的编程思想:
    思想:非常高度概括的思想和行为的准则
    编程思想:指引我们编程(开发/写代码)的原则

    面向过程的编程思想:
    经典代表:C语言
    程序的最小单位是函数。一个函数代表一个功能
    程序员关注的角度:把大的功能分解为一个一个小的功能。只关注怎么做。
    面向过程是把数据与功能分开的。
    面向对象的编程思想:
    经典代表:Java语言
    程序的最小单位是类/对象。
    程序关注的角度:把复杂的业务逻辑/功能中先抽取出“类”,然后再考虑这个类能包含什么属性、方法等
    面向对象是把数据和功能(行为)合起来。关注“谁”做

    面向对象的程序员从执行者的角度转变为指挥者的角度。

    例如:
    把大象装进冰箱的问题?



    面向过程:
    (1)把冰箱门打开
    (2)把大象装进去
    (3)把冰箱门关上

    面向对象:
    人、冰箱、大象

    人{
    String name;
    push(){
    }
    pull(东西){
    if(东西 instanceof 冰箱){
    冰箱 bing = (冰箱)东西;
    bing.open();
    }else if(东西 instanceof 大象){
    大象 da = (大象)东西;
    da.walk();
    }
    }
    }
    东西{
    }
    冰箱 extends 东西{
    double volume;
    open(){
    }
    close(){
    }
    save(){
    }
    }
    大象{
    walk(){
    }
    }

    人 p = new 人("张三");
    冰箱 b = new 冰箱(10000);
    大象 d = new 大象();

    p.pull(b);//人拉冰箱门
    p.pull(d);//人拉大象
    p.push(b);//人推冰箱门


    */

    //-----------------------------------------------------------------------------------------------

    /*
    面向对象的学习围绕几条主线:
    1、类与对象
    2、面向对象的基本特征:封装、继承、多态
    3、相关关键字和API
    4、面向对象的编程的原则和设计模式等
    */

    对象的属性内存图

     

     //方法-------------------------------------------------------

    /*

    6、方法声明与调用的总结
    先声明后调用

    1、声明
    【修饰符】 返回值类型 方法名(【形参列表】){
    方法体
    }

    (1)返回值类型如果不是void,在方法体中,需要return 返回值;的语句,
    (2)返回值类型是void,在方法体中,可以有return ;语句,会结束整个方法
    也可以没有return ;语句

    2、调用
    (1)本类同级别
    方法名(【实参列表】); //无返回值的方法
    变量 = 方法名(【实参列表】); //有返回值的方法
    (2)其他类中
    对象名.方法名(【实参列表】); //无返回值的方法
    变量 = 对象名.方法名(【实参列表】); //有返回值的方法

    说明:
    (1)如果被调用的方法的返回值类型是void,那么千万不要用变量接收,也不用打印方法调用;
    只能单独一个调用语句;

    (2)如果被调用的方法有(形参列表),那么调用时,必须传对应(实参列表)

    */

    //-0、总纲

    /*
    类的提取:
    名词提取法,转换为现实世界中的事物的类别==》计算机程序中的类

    类的设计:
    类的成员的设计
    5大成员(5大组成部分):
    1、属性:数据特征
    2、方法:行为特征,功能特征
    3、构造器:创建对象时用
    4、代码块:在类初始化和对象初始化时用的
    5、内部类:在某个大的事物中,包含了一个独立的小的事物类别,而且一般这个小的事物只为大的事物服务时


    类{
    成员列表
    }
    */

     011、类的声明的格式:

    【修饰符】 class 类名{
    }
    例如:
    class Person{
    }

    说明:类名,每一个单词的首字母都大写

    回忆:如果有一个类是public的,那么源文件名必须与类名相同

    2、类的第一类成员:属性
    (1)属性的声明
    【修饰符】 数据类型 属性名;

    3、如何用类来创建对象?
    语法格式:
    类名 对象名 = new 类名();
    对象名其实也是变量名/对象的引用

    对象名/变量名:从第二个单词开始首字母大写

    4、为某个对象的属性赋值
    对象名.属性名 = 值;

    5、访问某个对象的属性值
    例如:打印某个对象的属性值
    System.out.println(对象名.属性名);
    */

    class Person{
    //声明属性
    String name;
    int age;
    char gender;
    }
    //声明类
    public class test07{
    //声明main方法
    public static void main(String[]args ){
    //(1)创建对象
    Person p=new Person();
    //(2)为p对象的name属性赋值
    p.name="张三";
    //(3)为p对象的age赋值
    p.age=23;
    //为p对象的gender赋值
    p.gender='男';

    //(4)访问/显示对象的属性的值
    System.out.println("姓名:"+p.name);
    System.out.println("年龄:"+p.age);
    System.out.println("性别:"+p.gender);
    }
    }

    //------get,set属性赋值--------------------------------------------------------------------------------------------------

    /*
    1、声明一个圆的图形类,有属性:半径
    2、在测试类的main中,创建圆的2个对象,并为半径属性赋值
    */

    因为这要引用“包”,或者说引用外部类,我们怎么处理呢?有两种方法

     外部类创建好之后,先编译一下,然后写我们的调用类,切记一定不要漏掉主方法(Circel是外部类,其实也可以写在里面,但是我们现在写在外面是想告诉大家,怎么调用外部类,后面还会有更加常用的调用外部类的办法,这里只是基础或者说明白它的原理套路等)

    //--------属性----------------------------------------------------------------------- 

    /*
    属性的特点:
    1、属性有默认值
    原则和数组的元素的默认值一样。
    (1)基本数据类型
    byte,short,int,long:0
    float,double:0.0
    boolean:false
    char:u0000
    (2)引用数据类型:null
    例如:String是引用数据类型

    2、每一个对象的属性值是独立的
    */

    class test07_3{
    public static void main(String[]args){
    //1、创建一个动物的对象
    Animal a1 = new Animal();
    //2、直接访问a1对象的属性值
    System.out.println("a1的name属性值"+a1.name);//这样就知道默认值是多少了//默认值null
    System.out.println("a1的name属性值"+a1.legs); //默认值0

    //String str;//错误: 可能尚未初始化变量str
    //System.out.println("str = "+str);//错误: 可能尚未初始化变量str

    //创建第二个动物对象
    Animal a2 = new Animal();
    a2.name="大象";
    a2.legs=4;

    //访问a1对象的属性值
    System.out.println("a1的name属性值"+a1.name);
    System.out.println("a1的name属性值"+a1.legs);
    //访问a2对象的属性值
    System.out.println("a2的name属性值"+a2.name);
    System.out.println("a2的name属性值"+a2.legs);
    }
    }
    //Animal 动物
    class Animal{
    //属性
    String name;//动物的名称
    int legs;//腿的数量

    }

     ------类的成员之二:方法---------------------------------------------

    /*
    类的成员之二:方法
    方法(method)又称为函数(function)。
    方法是代表一个独立的可复用的功能。
    例如:Math.random(),代表产生[0,1)随机值的功能
    Math.sqrt(x),代表求x的平方根的功能

    声明方法的好处:
    (1)代码的复用
    (2)简化程序员的代码量:使用者不管关心方法的内部如何实现的,
    只要关注这个方法:功能、是否需要传参数、是否有返回值等问题

    1、如何声明一个方法?
    【修饰符】 返回值类型 方法名(【形参列表】){
    方法体:实现代码的功能
    }

    【修饰符】:今天先不讨论
    返回值类型:
    (1)void:代表无返回值,
    (2)非void:可以是任意的Java数据类型,包括8种基本数据类型、所有的引用数据类型
    方法名:
    (1)见名知意:能够体现这个方法的功能
    (2)和变量名一样,从第二个单词开始首字母大写
    (【形参列表】):
    (1)():无参
    (2)(形参列表):有参

    */

    class test07_4Method{
    /*
    public static:修饰符
    void:返回值类型
    main;方法名
    (String[] args):形参列表
    */
    public static void main(String[]args){
    //在本类中,同一级别的方法中,调用,直接调用
    //main()与printRectangle()在同一个类中,并且是同一个级别的方法
    printRectangle();
    System.out.println("-----------------------");
    printRectangle();
    }
    //这个位置是在类中
    //public static 是修饰符,先照抄
    //假设我这里想要完成一个功能:打印5行10列的*组成的矩形
    //void:返回值类型,它是一种特殊的返回值类型,表示无返回值
    //printRectangle:方法名
    //():形参列表,如果()中没有东西,称为“无参,空参”
    //{}:{}中是方法体,完成方法功能的代码
    public static void printRectangle(){
    for(int i=1;i<=5;i++){
    for(int j=1;j<=10;j++){
    System.out.print("*");
    }
    System.out.println();
    }
    }
    }

     

     --------------无参无返回值的方法-------------------------------------------------------------------------------------------------------------------

    /*
    方法的原则:
    (1)必须先声明后使用
    (2)不调用不执行

    一、无参无返回值的方法
    1、如何声明
    【修饰符】 void 方法名(){
    方法体
    }
    2、调用
    (1)在本类中,同一个级别,直接调用
    方法名();

    (2)在其他类中,需要通过"对象名.方法"
    对象名.方法名();

    */

    class test07_5NoParamNoReturnValue{

    public static void main(String[]args){
    //1、创建对象
    Studnet s1=new Studnet();
    //2、通过对象去调整方法
    s1.printInfo();

    //3、给属性赋值
    s1.name="杨洪波";
    s1.age=23;
    s1.score=100;

    //4、再次调用s1对象的printInfo()
    s1.printInfo();
    }
    }
    class Studnet{
    //属性
    String name;
    int age;
    int score;
    //方法
    //省略修饰符
    //1、声明一个方法,可以打印当前学生对象信息
    void printInfo(){
    System.out.println("姓名:" + name + ",年龄:" +age + ",成绩:" + score);
    }
    }

    ------------内部类的错误写法-----------------------------------------------------------------------------

    下面看几个错误写法来细品理解内部类

    /*
    .java的源文件的结构:
    类{

    方法{
    语句;//必须在方法中
    }
    }
    */

    class test07_6内部类1{

    public static void main(String[]args){
    //Circle c=new Circle();//这样使用有问题,后面再讲内部内的使用

    }
    //内部类
    class Circle{
    double radius; //声明圆的半径
    //System.out.println("半径:"+radius); //错误写法,不能把语句写到方法外面去
    void printInfo(){
    System.out.println("半径:"+radius);
    }
    //printInfo(); //这也是语句,调用方法的语句//但是这样写又是错的
    void test(){
    printInfo(); //这样调用才是对的
    }
    }
    }

    自己去敲一敲,才能理解:

     内部类后面讲解,现在只理解一下

    -----------------test07_7无参有返回值的方法-------------------------------------------------------------------------------------------------------------------

    /*
    无参有返回值的方法:
    double d = Math.random() ;
    int num = input.nextInt();
    double d = input.nextDouble() ;

    一、无参有返回值的方法
    1、声明格式
    【修饰符】 非void的返回值类型 方法名(){
    方法体
    }

    2、调用格式
    (1)其他类中:
    变量 = 对象名.方法名();

    System.out.println(对象名.方法名());

    这个变量用来接收返回值
    (2)本类的同级方法中
    变量 = 方法名();
    或者
    System.out.println(方法名());
    */

    -------------------------------有参无返回值-----------------------------------------------------------------------------

    /*
    三、有参无返回值的方法
    1、声明格式
    【修饰符】 void 方法名(形参列表){
    方法体
    }

    形参列表的格式:
    (数据类型 形参名)
    (数据类型1 形参名1, 数据类型2 形参名2, ....)

    2、调用格式
    (1)本类同级别
    方法名(实参列表);
    (2)其他类中
    对象名.方法名(实参列表);

    3、两个名词:
    形参列表:声明时()中
    (数据类型1 形参名1, 数据类型2 形参名2, ....)
    (int n,int m, char x)
    实参列表:调用时()中
    (3,5,'%')
    (a,b,c)

    5、实参与形参
    实参是赋值给形参赋值
    要求,实参的个数、类型、顺序与形参一一对应
    */

    class test07_8有参无返回值{
    public static void main(String[]args){
    //1、创建对象
    GraphicTools tools=new GraphicTools();

    //2、调用print5Line10ColumnStarRectangle()
    tools.print5Line10ColumnStarRectangle();

    //3、调用printRectangle(int n,int m,char x)
    tools.printRectangle(3,5,'%');// (3,5,'%')为实参

    //4、赋值之后再调用一次
    int a=2,b=4;
    char c='#';
    tools.printRectangle(a,b,c);// (a,b,c)称为实参列表
    }
    }
    //GraphicTools 图形工具类
    //在这个工具类中,有各种各样的打印图形的方法
    class GraphicTools{
    //省略修饰符
    //(1)声明一个可以打印5行10列的*的矩形
    //无参数无返回值
    void print5Line10ColumnStarRectangle(){
    for(int i=1;i<=5;i++){
    for(int j=1;j<=10;j++){
    System.out.print("*");
    }
    System.out.println();
    }
    }
    //(2)声明一个可以打印n行m列的*的某字符的矩形
    //让调用这个方法的程序员来决定n、m、x的值
    //形参列表(int n int m char x)
    void printRectangle(int n,int m,char x ){
    for(int i=1;i<=n;i++){
    for(int j=1;j<=m;j++){
    System.out.print(x);
    }
    System.out.println();

    }
    }
    }

     -------------四、有参有返回值的方法----------------------------------------------------------

    1、声明格式
    【修饰符】 非void的返回值类型 方法名(形参列表){
    方法体
    }

    2、调用格式
    (1)其他类中
    变量 = 对象名.方法名(实参列表);



    System.out.println(对象名.方法名(实参列表));
    (2)本类同级别调用
    变量 = 方法名(实参列表);


    System.out.println(方法名(实参列表));
    */

    class test07_9有参有返回值的方法{
    public static void main(String[]args){
    //1、创建对象
    MyMathTools tools=new MyMathTools();

    //2、调用max()
    int m=tools.max(4,6);
    System.out.println("4,6最大值是:" + m);
    System.out.println("5,2的最大值是"+tools.max(5,2));

    //3、调用threeNumberMax()
    System.out.println("3,2,7 的最大值是:"+tools.threeNumberMax(3,2,7));

    }
    }
    //声明一个数学计算工具类
    class MyMathTools{
    //1、求任意两个整数的最大值
    int max(int a,int b){
    return a>b?a:b;
    }
    //省略了访问修饰符
    //求任意三个整数的最大值
    int threeNumberMax(int x,int y,int z){
    //本类同级别调用
    /*
    int m=max(x,y);
    m=max(m,z);
    return m;
    */
    return max(max(x,y),z);
    }
    }

  • 相关阅读:
    编程术语英汉对照
    asp.net常用函数
    好的博客地址
    读取项目中的txt文件内容
    Web Service的定义
    ADO.NET在开发中的部分使用方法和技巧
    如何实现文本框焦点自动跳转及通过回车键提交表单
    15位和18位身份证JS校验实例
    PL/SQL 操作数据库常见脚本
    android 隐藏标题栏
  • 原文地址:https://www.cnblogs.com/liliang07/p/13352594.html
Copyright © 2011-2022 走看看