ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java基础 第七章 面向对象编程(基础)

2021-11-07 20:04:13  阅读:110  来源: 互联网

标签:p1 Java int void 基础 System 面向对象编程 方法 public


类与对象

(1)类就是数据类型,比如Cat(这个数据类型是自己创的)

(2)对象就是一个具体的实例

类和对象的区别与联系

(1)类是抽象的,概念的,代表一类事物,比如人类,猫类..,即它是数据类型

(2)对象是具体的,实际的,代表一个具体事物,即是实例

(3)类是对象的模板,对象是类的一个个体,对应一个实例

类和对象的内存分配机制

(1)栈:一般存放基本数据类型(局部变量)

(2)堆:存放对象

(3)方法区:常量池(常量,比如字符串),类加载信息

Java创建对象的流程简单分析

Person p = new Person();

p.name = "jack";

p.age = 10;

(1)先加载Person类信息(属性和方法信息,只会加载一次)

(2)在堆中分配空间,进行默认初始化

(3)把地址赋给p,p就指向对象

(4)进行指定初始化

属性/成员变量

  • 基本介绍

(1)从概念或叫法上看:成员变量 = 属性 = field(字段)

(2)属性是类的一个组成部分,一般是基本数据类型,也可以是引用数据类型。例如: int age 就是属性

细节

(1)属性的定义语法同变量,示例:访问修饰符 属性类型 属性名;

访问修饰符:public,protected,默认,private

(2)属性的定义类型可以为任意类型,包含基本类型或引用类型

(3)属性如果不赋值,有默认值

  • 例:猫猫问题

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

import java.util.Scanner;
public class Object01{
     public static void main(String[] args){
    //使用面向对象来解决
    //实例化一只猫【创建一只猫对象】
        Scanner myScanner = new Scanner(System.in);
        String name = myScanner.next();
        Cat cat1 = new Cat();
        cat1.name = "小白";
        cat1.age = 18;
        cat1.color = "white";
        Cat cat2 = new Cat();
        cat2.name = "小花";
        cat2.age = 100;
        cat2.color = "pink";
        if("小白".equals(name)){
            System.out.println(cat1.name + cat1.age+cat1.color);
        }else if("小花".equals(name)){
            System.out.println(cat2.name+cat2.age+cat2.color);
        }else{
            System.out.println("没有这只猫");
        }
    }
}
class Cat{
    String name;
    int age;
    String color;
}

成员方法

  • 基本介绍

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

  • 快速入门

    (1)添加speak成员方法,输出 我是一个优秀的人

    (2)添加cal01成员方法,可以计算从1+...+100的结果

    (3)添加cal02成员方法,该方法可以接收一个数n,计算从1+...+n的结果

    (4)添加getSum成员方法,可以计算两个数的和

public class Method01{
   public static void main(String[] args){
        //方法使用
        //定义好方法后,记得要调用,否则方法无效
        //先创建对象,然后调用方法即可
        Person p1 = new Person();
        p1.speak();
        p1.cal01();
        p1.cal02(10);
        int returnSum = p1.GetSum(20,30);
        System.out.println("GetSum方法返回的值="+ returnSum);
    }
}
class Person{
    //public表示方法是公开的
    //void:表示方法没有返回值
    public void speak(){
        System.out.println("我是一个优秀的人");
    }
    public void cal01(){
        int sum = 0;
        for(int i = 1;i <= 1000;i++){     
            sum += i;
        }
        System.out.println(sum);
    }
    public void cal02(int n){//(int n) 表示当前有一个形参n,可以接收用户的输入
        int sum = 0;
        for(int i = 1; i <= n;i++){
            sum += i;
        }
        System.out.println(sum);
    }
     public int GetSum(int num1,int num2){//返回的是一个整型 
         int sum = num1+num2;
         return sum;
     }
}

例:打印数组map{{1,2,3},{1,1,3},{3,2,4}}

public class Method02{
    public static void main(String[] args){
        int[][] map = {{1,2,3},{1,1,3},{3,2,4}};
        Mytools tools = new Mytools();
        tools.printmathod(map);
    }
}
class Mytools{
    public void printmathod(int[][] map){
        for(int i = 0;i < map.length;i++){
            for(int j = 0;j < map[i].length;j++)
                System.out.print(map[i][j]+" ");
        }
        System.out.println();
    }
}

注意事项

  • 返回类型:

(1)一个方法最多有一个返回值

(2)返回类型可以为任意类型,包含基本类型或引用类型

(3)如果方法要求有返回数据类型,则方法中最后的执行语句必须为return值;而且要求返回值类型必须和return的值类型一致或兼容

(4)如果方法是void,则方法体中可以没有return语句,或者只写return

  • 形参列表:

(1)一个方法可以有0个参数,也可以有多个参数,中间用逗号隔开

(2)参数类型可以为任意类型,包含基本类型或引用类型

(3)调用带参数的方法时,一定对应着参数列表传入相同类型或兼容类型的参数

(4)方法定义时的参数称为形式参数,简称形参;方法调用时的传入参数称为实际参数,简称实参。实参和形参的类型要一致或兼容、个数、顺序必须一致

  • 方法体:

    里面写完成功能的具体语句,可以为输入、输出、变量、运算、分支、循环、方法调用,但里面不能再定义方法。即:方法不能嵌套定义。

  • 方法调用:

    (1)同一个类中的方法调用:直接调用即可

    (2)跨类中的方法A类调用B类方法:需要通过对象名调用

    例:

public class MethodDetail01{
    public static void main(String[] args){
        A a = new A();
        a.No();
    }
}
class A{
    public void YesOk(int n){
        System.out.println(n);
    }
    public void No(){
        YesOk(10);//同一个类中的方法调用:直接调用即可
        System.out.println("你真棒");
        B b = new B();//跨类中的方法A类调用B类方法:需要通过对象名调用
        b.jump(20,30);
    }
}
class B{
    public void jump(int a,int b){
        int sum = a+b;
        System.out.println(sum);
    }
}

练习

(1)编写类AA,有一个方法:判断一个数是奇数还是偶数,返回boolean(键盘输入)

(2)根据行、列、字符打印对应行数和列数的字符

import java.util.Scanner;
public class Judgement{
   public static void main(String[] args){
        NewJudge a = new NewJudge();
        Scanner myScanner = new Scanner(System.in);
        int n = myScanner.nextInt();
       boolean b = a.judge(n);
       if(b){//练习(1)
       System.out.println("它是个偶数");
   }else{
    System.out.println("它是个奇数");
   }
       a.print(4,4,'*');//练习(2)
    }
}
class NewJudge{
    public boolean judge(int n){
        return n % 2 == 0;
    }
    public void print(int row,int col,char c){
        for (int i = 1;i <= row;i++){
            for(int j = 1;j <= col; j++){
                System.out.print(c);
            }
        System.out.println();
    }
    }
}

注意

!!!基本数据类型:形参的任何改变不影响实参

!!!对于数组(字符串)来说,传的是地址,形参实参相互影响

传参机制练习

例:编写一个方法copyPerson,可以复制一个Person对象,返回复制的对象。克隆对象,注意要求得到新对象和原来的对象是两个独立的对象,只是他们的属性相同

public class Copy{
     public static void main(String[] args){
        Person p1 = new Person();
        p1.name = "小白";
        p1.age = 18;
        Mytools tool = new Mytools();
        Person p2 = tool.copyPerson(p1);
        System.out.println("p1的属性 age ="+p1.age+"名字="+p1.name);
        System.out.println("p2的属性 age"+p2.age+"名字="+p2.name);
        System.out.println(p1==p2);
    }
}
class Person{
    String name;
    int age;
}
class Mytools{
    public Person copyPerson(Person p1){
        Person p2 = new Person();
        p2.name = p1.name;
        p2.age = p1.age;
        return p2;
    }
}

标签:p1,Java,int,void,基础,System,面向对象编程,方法,public
来源: https://blog.csdn.net/a2649432564/article/details/121196099

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有