首页 > 其他分享 >重学面向对象-基础篇01类与对象

重学面向对象-基础篇01类与对象

时间:2024-08-05 14:29:26浏览次数:8  
标签:01 name Person 对象 面向对象 int public String

类与对象

基础概念

类:一类事物,比较概括性(动物)

对象:类的实例,具体的某样事物(猫)

属性:类的成员变量,表示某事物所具有的特征(性别)

方法:对象可以做出的一些行为,是语句的集合,为了完成某件事情而存在(抓老鼠)

方法定义时编写的参数,我们一般称为形式参数,而调用方法实际传入的参数,我们称为实际参数。

静态变量:静态的内容,我们可以理解为是属于这个类的,也可以理解为是所有对象共享的内容。我们通过使用static关键字来声明一个变量或一个方法为静态的,一旦被声明为静态,那么通过这个类创建的所有对象,操作的都是同一个目标,也就是说,对象再多,也只有这一个静态的变量或方法。一个对象改变了静态变量的值,那么其他的对象读取的就是被改变的值。

代码实现

创建类->定义类->创建对象

public class Person {
    String name;
    int age;
    String sex;
}
public class Main {
    public static void main(String[] args) {
        new Person();
    }
}

使用对象

public class Main {
    public static void main(String[] args) {
        new Person();
        Person p1 = new Person();
        //此处p1存放的是对象的引用,而非本体,可通过对象的引用来间接操作对象
        Person p2 = p1;
        //p2赋值p1,仅传递对象的引用,而非对象的复制,p1和p2指向同一对象
        System.out.println(p1 == p2);
    }
}
public class Main {
    public static void main(String[] args) {
        Person p = new Person();
        p.name = "Alice"; //访问对象的属性,需要使用.运算符
        System.out.println(p.name);
    }
}

Alice
public static void main(String[] args) {
    Person p = null; //null是一个特殊的值,它表示空,也就是不引用任何的对象
    p.name = "小红"; //我任性,就是要操作
    System.out.println(p.name);
}

空指针异常:操作一个值为null的变量导致出现错误
public static void main(String[] args) {
    Person p = new Person();
    System.out.println("name = "+p.name);
    System.out.println("age = "+p.age);
    System.out.println("sex = "+p.sex);
}

//直接创建对象,那么对象的属性都会存在初始值,如果是基本类型,那么默认是统一为0(如果是boolean的话,默认值为false)如果是引用类型,那么默认是null

方法的调用

public class Person {
    String name;
    int age;
    String sex;

    void hello(){
        System.out.println("我叫 "+name+" 今年 "+age+" 岁了!");
    }

    int sum(int a, int b){
        int c = a + b;
        return c;
    }
}
public class Main {
    public static void main(String[] args) {
        Person p = new Person();
        p.name = "Alice"; //访问对象的属性,需要使用.运算符
        p.age = 21;
        int result = p.sum(10,20);
        System.out.println(result);
        p.hello(); //只需要使用.运算符,就可以执行定义好的方法
    }
}

30
我叫 Alice 今年 21 岁了!

方法进阶使用

//在方法中访问到当前对象的属性,那么可以使用this关键字,来明确表示当前类的示例对象本身
void setName(String name){
        this.name = name; //让当前对象的name变量值等于参数传入的值
    }

//如果方法内没有变量出现重名的情况,那么默认情况下可以不使用this关键字来明确表示当前对象
String getName(){
        return name; //没有使用this,但是当前作用域下只有对象属性的name变量,所以说直接就使用了
    }

方法的重载

//一个类中可以包含多个同名的方法,但是需要的形式参数不一样,方法的返回类型,可以相同,也可以不同,但是仅返回类型不同,是不允许的!
int sum(int a,int b) {
    return a + b;
}
double sum(double a,double b) {
    return a + b;
}
public class Main {
    public static void main(String[] args) {
        Person p = new Person();
        System.out.println(p.sum(1,2));
        System.out.println(p.sum(1.2,1));
    }
}

3
2.2

递归调用

void test(){
    test();
}

//计算从1加到n的和
int test(int n){
    if(n == 0) return 0;
    return test(n - 1) + n; //返回的结果是下一层返回的结果+当前这一层的n
}

构造方法

//要在对象创建时进行处理,我们可以使用构造方法(构造器)来完成
public class Person {
    String name;
    int age;
    String sex;

    Person() { //构造方法不需要指定返回值,并且方法名称与类名相同
        name = "小明"; //构造方法会在对象创建时执行,我们可以将各种需要初始化的操作都在这里进行处理
        age = 18;
        sex = "男";
    }
}
public class Main {
    public static void main(String[] args) {
        Person p = new Person(); //调用无参构造方法
        System.out.println(p.name);
    }
}

小明
//在我们自己定义一个构造方法之后,会覆盖掉默认的那一个无参构造方法,除非我们手动重载一个无参构造,否则要创建这个类的对象,必须调用我们自己定义的构造方法
public class Person {
    String name;
    int age;
    String sex;

    Person() { //构造方法不需要指定返回值,并且方法名称与类名相同
        name = "小明"; //构造方法会在对象创建时执行,我们可以将各种需要初始化的操作都在这里进行处理
        age = 18;
        sex = "男";
    }

    Person(String name, int age, String sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
}
public class Main {
    public static void main(String[] args) {
        Person p = new Person("小明", 18, "男"); //调用自己定义的带三个参数的构造方法
        System.out.println(p.name);
    }
}

静态变量&静态方法

静态内容一定会在第一个对象初始化之前完成加载

//我们通过使用static关键字来声明一个变量或一个方法为静态的,一旦被声明为静态,那么通过这个类创建的所有对象,操作的都是同一个目标,也就是说,对象再多,也只有这一个静态的变量或方法。
public class Person {
    String name;
    int age;
    String sex;
    static String info;

    //静态代码块可以用于初始静态变量
    static {
        info = "Apple";
    }

    static void test(){
        //在静态方法中,无法使用this关键字,因为this关键字代表的是当前的对象本身
        System.out.println("我是静态方法");
        //静态方法可以访问到静态变量,在静态方法中,无法获取成员变量的值
        System.out.println("静态变量的值为:" +info);
    }
}
public class Main {
    public static void main(String[] args) {
        Person.info = "Hello World";
        System.out.println(Person.info);
        Person.test();
    }
}

标签:01,name,Person,对象,面向对象,int,public,String
From: https://www.cnblogs.com/microwang/p/18343149

相关文章

  • 面向对象设计基本原则
    本文由ChatMoney团队出品引言在软件开发过程中,随着系统复杂度的增加和业务变更,程序员面临诸多挑战,如耦合性、内聚性、可维护性、可扩展性和可重用性。设计模式能有效地解决这些问题。设计模式蕴含了面向对象的精髓,掌握面向对象设计和分析是掌握设计模式的基础。它能帮助我们......
  • <数据集>COCO2017行人识别数据集<目标检测>
    数据集格式:VOC+YOLO格式图片数量:10000张标注数量(xml文件个数):10000标注数量(txt文件个数):10000标注类别数:1标注类别名称: ['person']序号类别名称图片数框数1person1000041131使用标注工具:labelImg标注规则:对类别进行画水平矩形框图片示例:标注示例:......
  • LeetCode 热题 HOT 100 (017/100)【宇宙最简单版】
    【链表】No.0148排序链表【中等】......
  • Haskell:面向对象OOP的实现
    Haskell作为一种纯函数式编程语言,并不直接支持传统面向对象编程(OOP)中的类、继承、多态等概念。然而,Haskell的强大类型系统和一些高级特性允许开发者以函数式的方式模拟OOP的某些方面。以下是一些Haskell中模拟OOP支持的示例:1.使用记录(Record)和类型类(Typeclass)模......
  • 量子计算时间线2000-2010
    Reference同《量子计算时间线1968-1999》2000ArunK.PatiandSamuelL.Braunsteinprovethequantumno-deletingtheorem.Thisisdualtotheno-cloningtheoremwhichshowsthatonecannotdeleteacopyofanunknownqubit.Togetherwiththestrongerno......
  • 代码随想录day20 || 235 二叉搜索树最近公共祖先,701 二叉搜索树插入,450,二叉搜索树删除
    235二叉搜索树最近公共祖先unclowestCommonAncestor(root,p,q*TreeNode)*TreeNode{ //本题相较于普通二叉树寻找最近公共祖先加了题设条件二叉搜索树,所以使用二叉搜索树特性 //如果root大于两个目标节点,那么目标都在root左子树 //如果root小于两个目标节点,那么目......
  • Ros2 Moveit2 之 围绕对象进行规划 - 添加障碍物
    本教程将向您介绍如何将对象插入规划场景并围绕它们进行规划。先决条件如果您还没有这样做,请确保您已完成RViz中的可视化hello_moveit中的步骤。本项目假设您从上一个教程结束的地方开始。如果您只想运行本教程,您可以按照Docker指南启动一个包含已完成教程的容器。步骤1添......
  • P3959 [NOIP2017 提高组] 宝藏
    思路:考虑状态压缩动态规划。定义\(dp_{i,j,S}\)表示点\(j\)离起点\(i\)的距离,且从点\(j\)开始打通的点集为\(S\)的最小代价(注意\(S\)不能包含\(j\))。考虑枚举\(S\)一个一个子集\(S'\),同时枚举一个\(k\),需要满足\(k\inS'\),即我们可以先打通\(j\tok\),然后......
  • 面向对象与面向过程
    面向对象与面向过程面向对象就是:把数据及对数据的操作方法放在一起,作为一个相互以来的整体--对象。对同类对象抽象出其特性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。程序流程由用户在使用中......
  • js动态构建属性名并访问其对象属性(动态的对象或着数组名)
    js动态构建属性名并访问其对象属性(动态属性访问)在开发中有时会遇到这种情况:你写了很多的函数,写完发现他们的操作逻辑都是相同的,但是原始数据不同,如:/*获取区域,道路拥堵指数对应的色标*/makeCongestionColor(num){letoutColor='#fff'letcol......