java学习笔记(五)-面向对象(属性和方法)

编程思想

1. 面向过程的编程思想
    解决问题的时候按照一定的过程(流程)
    钟点工—> 大象装冰箱      总共分几步
    1.开门      2.大象装里面     3.关门
    以过程为本–复用–增加了很多冗余
    大段的过程 拆分成小段 — 到底是哪一个实体来做的
2.面向对象的编程思想
    解决问题的时候按照现实生活中的规律来考虑问题
    考虑在这个问题的过程中      有几个实体参与进来
     理解为     实体动作动作的支配者     没有实体动作就发生不了
    人     冰箱     大象
    分析每一类个体都有什么特点 做了哪些事情
    大象      特点     大     体重很重
    冰箱     特点     有门     容积
    人      特点     能做事情 做了哪些事情呢 ? 开冰箱门 装大象 关门    

面向对象

1. 类和对象

类----人类 抽象笼统的概念 描述一类事物 肯定是具有相同的特征行为
        人类有名字    有年龄    有性别-----静态描述特征(特征)-----属性
        人类能吃饭    能说话    能学习-----动态动作行为(做事)-----方法
对象–具体的人        人类中的一个具体的人     郑中拓
        郑中拓这个具体的人     有名字     有年龄    有性别
                                              能吃饭     能说话    能学习
在现实生活中 对象是先有的 总结出来的概念(类) 后产生的
在计算机中利用面向对象的思想来做事
        需要先自己定义(描述)一个类(型)
        想要做事情 需要在描述的类中创建一个具体的个体(对象)出来
        个体(对象)来做事

2. 如何在计算机中创建(描述)一个类

1.先创建一个类class
2.类的里面 利用属性或方法去描述这个类
3.创建一个当前类的对象   让对象调用属性/方法做事   对象的创建在哪儿都可以

public class Person {
        //这个文件是在计算机内 画的一张图纸
        //描述计算机里的人类长成什么样子

        //属性--静态描述特点
        //  必要的组成部分
        //  修饰符  数据类型  属性名字 [= 值];
        public String name;//全局变量
        public int age;
        public String sex;//
        //*方法--描述可以做什么事情(动作)
}

3. 类中的成员

类中的四个成员

  1. 属性 – 静态描述特征(存值)
        权限修饰符 [特征修饰符] 属性类型 属性名字 [= 值];
  2. 方法 – 动态描述行为(做事情)
        权限修饰符 [特征修饰符] 返回值类型 方法名字 ([参数列表]) [抛出异常] [{方法体}]
        最主要的是方法设计的参数及返回值问题 传递 调用 执行 内存
  3. 构造方法 – 创建当前类对象(做事情 唯一的事情)
        权限修饰符 与类名相同的方法名 ([参数列表]) [抛出异常] {方法体}
  4. 程序块 – 一个特殊的方法(没名 做事情 不用我们调用 构建对象之前调用)
        {方法体}

3.1 属性

权限修饰符 [特征修饰符] 属性类型 属性名字 [= 值];

3.2 方法

方法---->做一件事情
   权限修饰符 [特征修饰符] 返回值类型 方法名字 (参数列表) [抛出异常] [{
         方法体
    }]
    权限修饰符  返回值类型  方法名字  (参数列表) {
    }
    1.无参数无返回值
    2.无参数有返回值
    3.有参数无返回值
    4.有参数有返回值
   人类有名字 有年龄 有性别----属性
   人类能吃饭 能说话 能学习----方法
   
   方法中最主要的两个结构 方法的参数列表 方法的返回值类型
   方法体 可以理解为方法是做了一件事情
   返回值 可以理解为返回值是这件事情做完了 留下的一个结果
   返回值又有 基本数据类型 引用数据类型的区别 (详情见练习1)
   参数  可以理解为参数是做事情之前 必须提供的条件(可以多个)

3.3 构造方法

构造方法—做事情

  1. 作用: 只有一个 构建(构造)当前类的对象
  2. 写法: 权限修饰符 与类名一致的方法名  (参数列表) [抛出异常]{
          一件事情 创建一个对象(当前类Person)
         返回对象;
       }
  3. 用法: 通过new关键字调用
  4. 特点:
    1. 每一个类都有构造方法,若自己在类中没有定义,系统会默认提供一个无参数的构造方法
      若在类中自己定义了构造方法,则默认无参数的构造方法即被覆盖
    2. 构造方法是否存在方法重载?----存在构造方法重载
  5. 每一个类都有构造方法
       若不定义 系统会默认提供构造方法
       为什么要定义构造方法? 什么时候需要设计构造方法?
       在创建对象的同时 想要一并做一些事情 默认提供的构造方法是不会做的
       这个时候我们可以自己定义构造方法(无参数的构造方法内做事 也可以定义带参数的)
       如果自定义了有参的构造方法 必须自己添加无参的构造方法(因为添加有参构造方法后 系统就不会再默认添加无参构造方法)

3.4 程序块(代码块)

  1. 作用: 跟普通方法一样 做事情的
  2. 写法: 可以认为程序块是一个 没有修饰符 没有参数 没有返回值 没有名字的特殊方法
        {
        }
  3. 用法: 块也需要调用才能执行 我们自己调用不到(没有名字)
        每一次我们调用构造方法之前 系统会帮我们自动的调用一次程序块 让他执行一遍
  4. 特点: 没有什么重载的概念(压根连名字都没有 连参数都没有)
       但是可以在类中定义 多个程序块
  5. 块可以在里面写一些程序 我想要在创建对象之前执行

overload—方法重载

  1. 概念:一个类中的一组方法 相同的方法名字 不同的参数列表 这样的一组方法构成了方法重载
       参数列表的不同体现在哪里?
       参数的个数 参数的类型 参数的顺序
  2. 作用:为了让使用者便于记忆与调用 只需要记录一个名字 执行不同的操作
  3. 自己也可以设计方法重载
       调用方法的时候 首先通过方法名字定位方法
       如果方法名字有一致 可以通过参数的数据类型定位方法
       如果没有与传递参数类型一致的方法 可以找一个参数类型可以进行转化(自动)
  4. JDK1.5版本之后 出现了一个新的写法
       int… x 动态参数列表 类型固定 个数可以动态 0–n都可以
         x本质上就是一个数组 有length属性 有[index]
       动态参数列表的方法  不能 与相同意义的数组类型的方法构成方法重载 本质是一样的
       动态参数列表的方法 可以不传参数 相当于0个 数组的方法 必须传递参数
       动态参数列表在方法的参数中只能存在一份儿 且必须放置在方法参数的末尾
    public class TestOverload {
        public void test(int...x){//本质数组  int[] x = {1,2,3,4,5,6};
            System.out.println("执行了test方法携带动态列表");
            for(int i=0;i<x.length;i++){
                System.out.println(x[i]);
            }
        }
        public void test() {
            System.out.println("执行了test方法没有携带参数");
        }
        public void test(boolean b) {
            System.out.println("执行了test方法带boolean参数" + b);
        }
        public void test(char c) {
            System.out.println("执行了test方法带char参数" + c);
        }
        public void test(int i) {
            System.out.println("执行了test方法带int参数" + i);
        }
        public void test(String s) {
            System.out.println("执行了test方法带String参数" + s);
        }
        public static void main(String[] args) {
            //1.创建对象
            TestOverload to = new TestOverload();
            to.test(1, 2, 3, 4);

            to.test((char) 99);//方法参数传递  类型之间的转化问题
            //通过对象.方法名字  调用方法   可以直接通过方法名字定位方法
            //如果方法名字一致   通过方法的参数列表类型 来定位方法
            //2.通过对象调用方法  方法执行一遍
            //to.test(true);//不传参数 不行     传参数 参数类型不匹配  不行

        }
    }

this关键字

构造方法中 属性与变量重名 必须需要一个代替词 代替对象

  1. this是一个关键字(指代词) 代替的是某一个对象 (当前调用属性或方法时的那个对象)
  2. this既然代替的是一个对象
      this可以调用什么? 属性 方法 可以
      this可以调用构造方法么? 可以 在一个构造方法内可以调用另一个构造方法
      通过this(); 省略了构造方法的名字(必须与类名一致)
      必须在另一个构造方法内调用 必须在程序的第一行
      构造方法 一般方法 有顺序 认为构造方法早于一般方法
      在一般方法内调用构造方法呢? 不行
      构造方法可以重载 构造方法 调用另一个构造方法呢?
  3. this调用的过程可以放置在哪个位置写?
    调用属性或方法 这一行代码 可以放置在类中的任何成员位置 上下顺序随意

4. 命名规则和规约

  • 规则
       字母 数字 符号 中文
       字母 区分大小写
       数字 不能开头
       符号 _ $
       中文 不推荐使用
  • 规约
      类名字 首字母大写 两个单词以上 每一个首字母都大写
      Test  TestOne  TestOneTwo
      属性/方法/变量 驼峰式命名规约 首字母小写 两个单词以上 第二个以后的每一个首字母大写
      test  testOne  testOneTwo
       构造方法 与类名一致 类中唯一的大写字母开头的方法
       静态常量 全部字母大写 通过_做具体说明 BOOKSTORE_ADMIN
       包名   全部字母小写 Java关键字都是小写 注意与关键字不要冲突
       所有的名字最好—>见名知意(增强可读性 层次关系缩进 见名知意 注释)

5. 类的加载使用

类描述好了以后是不可以直接做事情
需要创建当前类的对象 通过new的方式
Person p = new Person();
通过p.调用啦 调用属性(存值/取值) 调用方法(执行一次)

扫描二维码关注公众号,回复: 8668892 查看本文章

类的加载及对象的创建

public class Person {
        //这个文件是在计算机内 画的一张图纸
        //描述计算机里的人类长成什么样子
        //属性--静态描述特点
        //  必要的组成部分
        //  权限修饰符 [特征修饰符] 数据类型 属性名字 [= 值];
        public String name;//全局变量
        public int age;
        public String sex;//
        //*方法--描述可以做什么事情(动作)
        //设计一个方法  用来描述人类可以做吃饭这件事情
        public void eat(){
                System.out.println("吃了一碗大米饭");
        }
        //设计一个方法  用来告诉别人我的名字  "郑中拓"
        //若方法的设计规定了返回值类型  方法内必须通过return关键字返回一个值
        public String tellName(){
                System.out.println("你们问我叫什么呀?勉强告诉你们一下");
                return "郑中拓";//只有一个
        }
        //设计一个新的吃饭方法
        //描述人类可以做吃饭饭这件事情
        public void chiFanFan(int count,String something){
                System.out.println("吃了"+count+"碗"+something);
        }
        //设计一个方法  买饮料   1.需不需要提供条件  2.需不需要给别人留下什么结果
        //      需要提供条件   钱
        //      需要返回值     买到的饮料 名字
        public String buyDrink(int money){
                if(money>5){
                        return "红牛";
                }else{
                        return "矿泉水";
                }
        }
}

调用

public class Test {
    //这个类没有什么现实意义
    //只是为了将主方法写在这里
    public static void main(String[] args){
//        1.创建一个对象  人类的对象
       Person p = new Person();
       p.drawStar(5,true);
       String drinkName = p.buyDrink(10);
       System.out.println("买到了一瓶:"+drinkName);
       p.chiFanFan(2,"面条");
       String myName = p.tellName();
       System.out.println("接收到了tellName方法的返回值:"+myName);
     
    }
}

5.1形参和实参

形参可以理解为是方法执行时的临时变量空间 x
实参可以理解为是方法调用时传递进去的参数 a
方法调用时会将实参的内容传递给形参
如果内容是基本类型 传递的 是值 形参改变 实参不变
如果内容是引用类型 传递的 是引用 形参改变 实参跟着改变
详情案例见练习1

5.2 方法设计和练习

发布了30 篇原创文章 · 获赞 0 · 访问量 6662

猜你喜欢

转载自blog.csdn.net/qq_37710756/article/details/103206665