Java零基础手把手保姆级教程_类和对象(超详细)

这篇具有很好参考价值的文章主要介绍了Java零基础手把手保姆级教程_类和对象(超详细)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java零基础手把手保姆级教程_类和对象(超详细)

1. 类和对象

1.1 类和对象的理解

客观存在的事物皆为对象 ,所以我们也常常说万物皆对象。

    • 类的理解
      • 类是对现实生活中一类具有共同属性和行为的事物的抽象
      • 类是对象的数据类型,类是具有相同属性和行为的一组对象的集合
      • 简单理解:类就是对现实事物的一种描述
    • 类的组成
      • 属性:指事物的特征,例如:手机事物(品牌,价格,尺寸)
      • 行为:指事物能执行的操作,例如:手机事物(打电话,发短信)
  • 类和对象的关系

    • 类:类是对现实生活中一类具有共同属性和行为的事物的抽象

Java零基础手把手保姆级教程_类和对象(超详细),JavaSe,java,开发语言

  • 对象:是能够看得到摸的着的真实存在的实体

Java零基础手把手保姆级教程_类和对象(超详细),JavaSe,java,开发语言

  • 简单理解:类是对事物的一种描述,对象则为具体存在的事物

1.2 类的定义

类的组成是由属性和行为两部分组成

  • 属性:在类中通过成员变量来体现(类中方法外的变量)
  • 行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)

类的定义步骤:

①定义类,类名注意采用大驼峰定义

②编写类的成员变量

③编写类的成员方法

public class 类名 {
	// 成员变量
	变量1的数据类型 变量1;
	变量2的数据类型 变量2;// 成员方法
	方法1;
	方法2;	
}

示例代码:

/*
    手机类:
        类名:
        手机(Phone)

        成员变量:
        品牌(brand)
        价格(price)

        成员方法:
        打电话(call)
        发短信(sendMessage)
 */
public class Phone {
    //成员变量
    String brand;
    int price;

    //成员方法
    public void call() {
        System.out.println("打电话");
    }

    public void sendMessage() {
        System.out.println("发短信");
    }
}

注意事项

  1. 类名注意采用大驼峰定义
  2. 成员前写法统一为 public ,后面会详细解释
  3. 此处写的方法不带 static 关键字 . 后面会详细解释
  4. 一般一个文件当中只定义一个类
  5. main方法所在的类一般要使用public修饰(注意:Eclipse默认会在public修饰的类中找main方法)
  6. public 修饰的类必须要和文件名相同
  7. 不要轻易去修改 public 修饰的类的名称,如果要修改,通过开发工具修改 。Refactor-Rename
  8. 同级目录底下,类名不能重复

1.3 对象的使用

  • 创建对象的格式:
    • 类名 对象名 = new 类名();
  • 调用成员的格式:
    • 对象名.成员变量
    • 对象名.成员方法();
  • 示例代码
/*
    创建对象
        格式:类名 对象名 = new 类名();
        范例:Phone p = new Phone();

    使用对象
        1:使用成员变量
            格式:对象名.变量名
            范例:p.brand
        2:使用成员方法
            格式:对象名.方法名()
            范例:p.call()
 */
public class PhoneDemo {
    public static void main(String[] args) {
        //创建对象
        Phone p = new Phone();

        //使用成员变量
        System.out.println(p.brand);
        System.out.println(p.price);

        p.brand = "小米";
        p.price = 2999;

        System.out.println(p.brand);
        System.out.println(p.price);

        //使用成员方法
        p.call();
        p.sendMessage();
    }
}

1.4 学生对象-练习

  • 需求:首先定义一个学生类,然后定义一个学生测试类,在学生测试类中通过对象完成成员变量和成员方法的使用
  • 分析:
    • 成员变量:姓名,年龄…
    • 成员方法:学习,做作业…
  • 示例代码:
class Student {
    //成员变量
    String name;
    int age;

    //成员方法
    public void study() {
        System.out.println("好好学习,天天向上");
    }

    public void doHomework() {
        System.out.println("键盘敲烂,月薪过万");
    }
}
/*
    学生测试类
 */
public class StudentDemo {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student();

        //使用对象
        System.out.println(s.name + "," + s.age);

        s.name = "林青霞";
        s.age = 30;

        System.out.println(s.name + "," + s.age);

        s.study();
        s.doHomework();
    }
}

1.5测测你掌握了没?

1.引用可以指向引用吗?

不可以,引用只能指向对象

Java零基础手把手保姆级教程_类和对象(超详细),JavaSe,java,开发语言

上述代码:dog2这个引用指向了dog1这个引用所指向的对象, 两个引用同时指向一个对象,而不是指向了dog1这个引用

2.一个引用能不能同时指向多个对象?

Java零基础手把手保姆级教程_类和对象(超详细),JavaSe,java,开发语言

不可以,最后dog1这个引用只会存储一个对象的地址

2. 对象内存图

2.1 单个对象内存图

  • 成员变量使用过程

Java零基础手把手保姆级教程_类和对象(超详细),JavaSe,java,开发语言

  • 成员方法调用过程

Java零基础手把手保姆级教程_类和对象(超详细),JavaSe,java,开发语言

2.2 多个对象内存图

  • 成员变量使用过程

Java零基础手把手保姆级教程_类和对象(超详细),JavaSe,java,开发语言

  • 成员方法调用过程

Java零基础手把手保姆级教程_类和对象(超详细),JavaSe,java,开发语言

  • 总结:

    多个对象在堆内存中,都有不同的内存划分,成员变量存储在各自的内存区域中,成员方法多个对象共用的一份

2.3 多个对象指向相同内存图

Java零基础手把手保姆级教程_类和对象(超详细),JavaSe,java,开发语言

  • 总结

    当多个对象的引用指向同一个内存空间(变量所记录的地址值是一样的)

    只要有任何一个对象修改了内存中的数据,随后,无论使用哪一个对象进行数据获取,都是修改后的数据。

3. 成员变量和局部变量

3.1 成员变量和局部变量的区别

  • 类中位置不同:成员变量(类中方法外)局部变量(方法内部或方法声明上)
  • 内存中位置不同:成员变量(堆内存)局部变量(栈内存)
  • 生命周期不同:成员变量(随着对象的存在而存在,随着对象的消失而消失)局部变量(随着方法的调用而存在,醉着方法的调用完毕而消失)
  • 初始化值不同:成员变量(有默认初始化值)局部变量(没有默认初始化值,必须先定义,赋值才能使用)

4. 封装

4.1 private关键字

private是一个修饰符,可以用来修饰成员(成员变量,成员方法)

  • 被private修饰的成员,只能在本类进行访问,针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作

    • 提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰
    • 提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰
  • 示例代码:

    /*
        学生类
     */
    class Student {
        //成员变量
        String name;
        private int age;
    
        //提供get/set方法
        public void setAge(int a) {
            if(a<0 || a>120) {
                System.out.println("你给的年龄有误");
            } else {
                age = a;
            }
        }
    
        public int getAge() {
            return age;
        }
    
        //成员方法
        public void show() {
            System.out.println(name + "," + age);
        }
    }
    /*
        学生测试类
     */
    public class StudentDemo {
        public static void main(String[] args) {
            //创建对象
            Student s = new Student();
            //给成员变量赋值
            s.name = "林青霞";
            s.setAge(30);
            //调用show方法
            s.show();
        }
    }
    

4.2 private的使用

  • 需求:定义标准的学生类,要求name和age使用private修饰,并提供set和get方法以及便于显示数据的show方法,测试类中创建对象并使用,最终控制台输出

    林青霞,30

  • 示例代码:

    /*
        学生类
     */
    class Student {
        //成员变量
        private String name;
        private int age;
    
        //get/set方法
        public void setName(String n) {
            name = n;
        }
    
        public String getName() {
            return name;
        }
    
        public void setAge(int a) {
            age = a;
        }
    
        public int getAge() {
            return age;
        }
    
        public void show() {
            System.out.println(name + "," + age);
        }
    }
    /*
        学生测试类
     */
    public class StudentDemo {
        public static void main(String[] args) {
            //创建对象
            Student s = new Student();
    
            //使用set方法给成员变量赋值
            s.setName("林青霞");
            s.setAge(30);
    
            s.show();
    
            //使用get方法获取成员变量的值
            System.out.println(s.getName() + "---" + s.getAge());
            System.out.println(s.getName() + "," + s.getAge());
    
        }
    }
    

4.3 this关键字

  • this修饰的变量用于指代成员变量,其主要作用是(区分局部变量和成员变量的重名问题)
    • 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
    • 方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量
public class Student {
    private String name;
    private int age;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void show() {
        System.out.println(name + "," + age);
    }
}

4.4 this内存原理

  • this代表当前调用方法的引用,哪个对象调用的方法,this就代表哪一个对象

  • 示例代码:

    public class StudentDemo {
        public static void main(String[] args) {
            Student s1 = new Student();
            s1.setName("林青霞");
            Student s2 = new Student();
            s2.setName("张曼玉");
        }
    }
    
  • 图解:

    Java零基础手把手保姆级教程_类和对象(超详细),JavaSe,java,开发语言

4.5 this特性

  1. 当new了一个对象,就会调用构造方法

  2. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次

  3. 构造方法至少有一个, 也就是说, 当你没有写任何构造方法时, 编译器/java会自带一个不带参数的构造方法, 只不过默认的这个构造方法没有具体的实现任何功能.

注意:一旦用户定义了任意一种构造方法,编译器则不再生成不带参数的构造方法。

  1. 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法) ,所以可以用构造方法对对对象进行初始化.
  2. 构造方法中,可以通过this调用其他构造方法来简化代码
  3. 绝大多数情况下使用public来修饰,特殊场景下会被private修饰

4.6 封装思想

  1. 封装概述
    是面向对象三大特征之一(封装,继承,多态)
    是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界是无法直接操作的
  2. 封装原则
    将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
    成员变量private,提供对应的getXxx()/setXxx()方法
  3. 封装好处
    通过方法来控制成员变量的操作,提高了代码的安全性
    把代码用方法进行封装,提高了代码的复用性

5. 构造方法

5.1 构造方法概述

构造方法是一种特殊的方法,该方法没有返回值, 名字必须与类名相同,在创建对象时,由编译器自动调用,并且 在整个对象的生命周期内只调用一次

  • 作用:创建对象 Student stu = new Student();

  • 格式:

    public class 类名{

    ​ 修饰符 类名( 参数 ) {

    ​ }

    }

  • 功能:主要是完成对象数据的初始化

  • 示例代码:

class Student {
    private String name;
    private int age;

    //构造方法
    public Student() {
        System.out.println("无参构造方法");
    }

    public void show() {
        System.out.println(name + "," + age);
    }
}
/*
    测试类
 */
public class StudentDemo {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student();
        s.show();
    }
}

5.2 构造方法的注意事项

  • 构造方法的创建

如果没有定义构造方法,系统将给出一个默认的无参数构造方法
如果定义了构造方法,系统将不再提供默认的构造方法

  • 构造方法的重载

如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法

  • 推荐的使用方式

无论是否使用,都手工书写无参数构造方法

  • 重要功能!

可以使用带参构造,为成员变量进行初始化

  • 示例代码
/*
    学生类
 */
class Student {
    private String name;
    private int age;

    public Student() {}

    public Student(String name) {
        this.name = name;
    }

    public Student(int age) {
        this.age = age;
    }

    public Student(String name,int age) {
        this.name = name;
        this.age = age;
    }

    public void show() {
        System.out.println(name + "," + age);
    }
}
/*
    测试类
 */
public class StudentDemo {
    public static void main(String[] args) {
        //创建对象
        Student s1 = new Student();
        s1.show();

        //public Student(String name)
        Student s2 = new Student("林青霞");
        s2.show();

        //public Student(int age)
        Student s3 = new Student(30);
        s3.show();

        //public Student(String name,int age)
        Student s4 = new Student("林青霞",30);
        s4.show();
    }
}

5.3 标准类制作

  • 需求:定义标准学生类,要求分别使用空参和有参构造方法创建对象,空参创建的对象通过setXxx赋值,有参创建的对象直接赋值,并通过show方法展示数据。
  • 示例代码:
class Student {
    //成员变量
    private String name;
    private int age;

    //构造方法
    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //成员方法
    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void show() {
        System.out.println(name + "," + age);
    }
}
/*
    创建对象并为其成员变量赋值的两种方式
        1:无参构造方法创建对象后使用setXxx()赋值
        2:使用带参构造方法直接创建带有属性值的对象
*/
public class StudentDemo {
    public static void main(String[] args) {
        //无参构造方法创建对象后使用setXxx()赋值
        Student s1 = new Student();
        s1.setName("林青霞");
        s1.setAge(30);
        s1.show();

        //使用带参构造方法直接创建带有属性值的对象
        Student s2 = new Student("林青霞",30);
        s2.show();
    }
}

5.4 标准JavaBean

JavaBean:可以理解为实体类,对象可以在程序中封装数据

标准JavaBean需要满足的要求:

1.成员变量Private修饰
2.提供无参构造器
3.提供getter和setter方法文章来源地址https://www.toymoban.com/news/detail-745765.html

到了这里,关于Java零基础手把手保姆级教程_类和对象(超详细)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2023最新最全git安装教程,保姆级手把手式安装!!!

            目录 一、git简介 二、安装过程       1.首先进入git的官网:https://git-scm.com/然后选择Downloads。       2.接着选择与自己电脑系统对应的下载选项,我的电脑是windows7的系统,因此选择windows。       3.进去之后,先别着急选择,先查看自己的电脑系统是64位操作

    2024年02月05日
    浏览(34)
  • 干货|手把手教你怎么做好一块PCB!保姆级教程

    目录 一.明确设计目标 二.了解所用元器件的功能对布局布线的要求 三. 元器件布局的考虑 四.对布线的考虑 1.传输线 2.传输线的几种类型 3.端接传输线 4.非端接传输线 5.几种端接方式的比较 五.PCB 板的布线技术 接受到一个设计任务,首先要明确其设计目标,是普通的 PCB 板、高

    2023年04月22日
    浏览(58)
  • 【运维知识进阶篇】手把手教你搭建OpenVPN(保姆级教程)

    VPN就是虚拟专用通道,是提供给企业之间或者公司个人与公司之间安全数据传输的隧道,OpenVPN是Linux下开源VPN的先锋,提供了良好的性能和友好的用户GUI(图形用户界面)。本篇文章包含OpenVPN应用场景,OpenVPN服务端搭建,OpenVPN客户端搭建(windows+linux),OpenVPN密码认证,手

    2024年02月13日
    浏览(55)
  • 【三万字保姆级教程】手把手带你玩转Midjourney AI绘画

    如上图所示,想要学习创作美丽、复杂的艺术作品吗? Midjourney的AI绘画课程为你提供了一个完整的学习体验,从基础概念到实践项目,让你掌握使用AI绘画工具和软件的技巧,让你的创作过程更加简单! 我们的课程适合对AI绘画感兴趣的初学者、艺术家、设计师、教育工作者

    2024年02月09日
    浏览(42)
  • 2023电工杯B题全保姆论文讲解手把手教程 人工智能影响评价

    更新:电工杯B题全保姆论文成品教程,手把手教你完成高质量成品 这次b题是这一道问卷分析题目,是我最擅长的题目之一了,问卷分析看起来简单,实际上没那么那简单,考验的是我们能不能把数据描述清楚,一昧对模型意义不大,追求的是有理有据,逻辑清晰。 大家可以

    2024年02月08日
    浏览(30)
  • 小白逆袭大神之路:零基础Java教程,手把手教你安装JDK与配置主流IDE

    了解JDK和IDE 首先,让我们来简单了解一下JDK和IDE。 JDK(Java Development Kit) :这是Java开发的核心工具包,包含了Java运行时环境(JRE)、Java编译器(javac)以及其他一些工具。简单来说,没有JDK,你就无法编写或运行Java程序。 IDE(Integrated Development Environment) :这是一个软件

    2024年03月20日
    浏览(43)
  • 【手把手教程】MacOS 安装Multipass一款更轻量级的虚拟机 保姆级安装教程

    千寻简笔记已开源,Gitee与GitHub搜索 chihiro-notes ,包含笔记源文件 .md ,以及PDF版本方便阅读,且是用了精美主题,阅读体验更佳,如果文章对你有帮助请帮我点一个 Star ~ 由于在mac上使用docker,创建了两个容器之后内存占用就非常高,总结两套解决方案。 方案一: 在docke

    2024年01月20日
    浏览(36)
  • 【云计算学习】open stack云平台安装部署(一)(小白手把手教会、保姆级教程)

    1.安装centos7虚拟机 这里我们使用的镜像文件为 CentOS-7-x86_64-DVD-2009 ,我们仅需配置 controller 节点,再将 controller 配置完成后直接克隆一台配置为 compute 节点。 2.为centos7虚拟机添加双网卡 点击 编辑此虚拟机设置 ,在下方找到 添加 按钮,点击添加,为虚拟机添加一张网卡 3.修

    2024年01月21日
    浏览(37)
  • 手把手教你在云环境炼丹:Stable Diffusion LoRA 模型保姆级炼制教程

     很多同学都想要自己的专属AI模型,但是大模型的训练比较费时费力,不太适合普通用户玩。AI开发者们也意识到了这个问题,所以就产生了微调模型,LoRA就是其中的一种。在AI绘画领域,只需要少量的一些图片,就可以训练出一个专属风格的LoRA模型,比如某人的脸、某个姿

    2024年02月03日
    浏览(44)
  • 【抓包教程】微信小程序精准流量抓包教程(超详细 保姆级教程 BP安装证书手把手教)

    1.打开浏览器,右上角打开设置。搜索代理 我们点击最后一个,打开计算机的代理设置。自动跳转到设置界面。 按照如下图配置 这里的地址和端口要和我们BP中的一致,我们需要打开bp看看。 这里配置相同后,我们打开浏览器,输入以下内容,下载证书 点击右上角,会自动下

    2024年02月21日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包