IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java6-类-对象-成员变量-局部变量 -> 正文阅读

[Java知识库]java6-类-对象-成员变量-局部变量

类和对象

类和对象介绍

定义:是对现实生活中一类具有相同属性和行为的事物的抽象。
特点:
①类是对象的数据类型
②类是具有相同属性和行为的一组对象的集合
③一个类可以对应多个对象,只要对象的属性和行为是相同的

对象

定义:万物皆对象,客观存在的事物皆是对象。
是能够看得到摸得着的真实存在的实体。

对象的属性

属性:对象具有的各种特征,每个对象的每个属性都拥有特定的值。

对象的行为

行为:对象能执行的操作。

关系
  • 对象和类之间的关系:
    ①对象是计算机中具体的数据信息;类是信息的数据类型。
    ②对象是能够看到到摸得着的真实存在的实体;类是对现实生活中一类具有共同属性和行为的事物的抽象。
    ③对象是类的实体;类是对象的抽象。

类的定义

类基础内容

类的重要性:是java程序的基本组成单位;
:是对现实生活中一类具有相同属性和行为的事物的抽象,确定对象将拥有的属性和行为。
类的组成:属性和行为。
属性:在类中通过成员变量来体现(类中方法外的变量)
行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键词即可

类的定义步骤

定义步骤:
①定义类
②编写类的成员变量
③编写类的成员方法

//①定义类
public class 类名(){
	//②编写类的成员变量
	变量1数据类型 变量1;
	变量2数据类型 变量2//③编写类的成员方法,定义方法去掉static关键字
	方法1;
	方法2}

案例:
//类手机;成员变量品牌、价格;成员方法打电话、发短信;

public class Demo110 {
    //编写类的成员变量
    String brand;
    int price;
    //成员方法
    public void call(){
        System.out.println("打电话");
    }
    public void sendMessage(){
        System.out.println("发短信");
    }
}
对象的使用

创建对象

类名 对象名 = new 类名();

使用对象

使用成员对象
格式:对象名.变量名
使用成员方法
格式:对象名.方法名()

案例:
//需要在phoneDemo类下所在包下,创建phone类。

public class phone {
    //编写类的成员变量
    String brand;
    int price;
    //成员方法
    public void call(){
        System.out.println("打电话");
    }
    public void sendMessage(){
        System.out.println("发短信");
    }
}

public class phoneDemo {
    public static void main(String[] args) {
        //创建对象
        phone p = new phone();
        //使用对象
        //使用对象的成员变量
        System.out.println(p.price);//输出0
        //类phone的成员变量price 定义 int类型,其对应的默认值是0
        System.out.println(p.brand);//输出null
        //类phone的成员变量brand 定义 string类型,其对应的默认值是null
        //在没有定义具体值的时候,输出的是变量的默认值。

        //给变量赋值再输出
        p.price = 2999;
        p.brand = "小米";
        System.out.println(p.price);
        System.out.println(p.brand);

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

案例:学生
思路:

①定义一个学生类(Student)
成员变量:name、age
成员方法:study();
        doHomework();
②定义一个学生测试类(StudentDemo)
要做测试,有主方法,main方法
③在学生测试类中通过调用对象完成成员变量和成员方法的使用
	给成员变量赋值,输出成员变量的值
	调用成员方法

代码:

//定义学生类
public class Student{
    // 定义成员变量
    String name;
    int age;
    //定义成员方法
    public void study(){
        System.out.println("学习");
    }
    public void doHomework(){
        System.out.println("做作业");
    }
}

//写测试类,要注意在main方法里写对象的创建和使用。
public class StudentDemo {
    public static void main(String[] args){
        //创建对象
        Student stu = new Student();

        //使用成员对象
        System.out.println(stu.name);//null
        System.out.println(stu.age);//0

        //对成员对象赋值
        stu.name = "xhj";
        stu.age = 25;

        System.out.println(stu.name);//xhj
        System.out.println(stu.age);//25

        //使用成员
        stu.study();
        stu.doHomework();
    }
}

单个对象

对象内存图(单个对象)
图示:
单个对象内存图
代码:

//定义学生类
public class Student{
    // 定义成员变量
    String name;
    int age;
    //定义成员方法
    public void study(){
        System.out.println("学习");
    }
    public void doHomework(){
        System.out.println("做作业");
    }
}

//写测试类,要注意在main方法里写对象的创建和使用。
public class StudentDemo {
    public static void main(String[] args){
        //创建对象
        Student stu = new Student();

        System.out.println(stu);//com.itheima110.Student@1b6d3586

        //使用成员对象
        System.out.println(stu.name);//null
        System.out.println(stu.age);//0

        //对成员对象赋值
        stu.name = "xhj";
        stu.age = 25;

        System.out.println(stu.name);//xhj
        System.out.println(stu.age);//25

        //使用成员
        stu.study();//学习
        stu.doHomework();//做作业
    }
}

多个对象

对象内存图(多个对象)
图示:
多个对象内存图
代码:

public class StudentDemo2 {
    public static void main(String[] args){
        //创建第一个对象
        Student stu1 = new Student();
        stu1.age = 30;
        stu1.name = "汐沫";
        System.out.println(stu1);
        //com.itheima110.Student@1b6d3586
        System.out.println(stu1.age + ", " + stu1.name );
        // 输出30, 汐沫
        stu1.study();//学习
        stu1.doHomework();//做作业
        //创建第二个对象
        Student stu2 = new Student();
        stu2.age = 20;
        stu2.name = "西贝";
        System.out.println(stu2);
        //com.itheima110.Student@4554617c
        System.out.println(stu2.age + ", " + stu2.name );
        //输出20, 西贝
        stu2.study();//学习
        stu2.doHomework();//做作业
    }
}

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

图示:
多个对象指向相同的地址
代码:

//多个内存指向相同内存图
public class StudentDemo3 {
    public static void main(String[] args){
        //创建对象1
        Student stu1 = new Student();
        stu1.age = 33;
        stu1.name = "汪苏泷";
        System.out.println(stu1);
        //com.itheima110.Student@1b6d3586
        System.out.println(stu1.name + ", " + stu1.age);
        //汪苏泷, 33
        //创建对象2
        Student stu2 = stu1;
        stu2.age = 36;
        stu2.name = "许嵩";
        System.out.println("stu2:" + stu2);
        //stu2:com.itheima110.Student@1b6d3586
        System.out.println("stu1:"+stu1);
        //stu1:com.itheima110.Student@1b6d3586
        System.out.println("stu2:"+stu2.name + ", " + stu2.age);
        //stu2:许嵩, 36
        System.out.println("stu1:"+stu1.name + ", " + stu1.age);
        //stu1:许嵩, 36
    }
}

成员变量和局部变量

两者定义

成员变量:类内方法外的变量
局部变量:方法中的变量

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

理解:
①类中位置不同,局部变量在方法内或方法申明上,方法申明上指的是:定义方法时形参的位置,也就是括号中的变量。

封装

private关键字

  • 介绍:
    是一个权限修饰符;
    可以修饰成员(成员变量和成员方法);
    作用:是保护成员不被别的类使用,被private修饰的成员只能在本类中才能被访问;
  • 针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作。
    提供 g e t 变 量 名 ( )  ̄ \underline{get变量名()} get()?方法,用于获取成员变量的值,方法用public修饰;
    提供 s e t 变 量 名 ( 参 数 )  ̄ \underline{set变量名(参数)} set?方法,用于设置成员变量的值,方法用public修饰。
    注意:变量名要注意首字符大写。

案例:测试类

//学生测试类
public class Student1Demo {
    public static void main(String[] args){
        //创建对象
        Student1 stu = new Student1();
        //通过对象给成员变量赋值
        stu.name = "aa";
        //设置类的成员变量为private权限时,就不可通过创建对象,对象.属性来给成员变量赋值。
       // stu.age = 20;
        //通过对象.属性直接访问对象的属性会存在数据安全隐患。
        //具体问题是:年龄是没有负数的,且也不可能超过120,但是在直接操作的时候,可能会手误书写成负数。
        stu.getAge();
        stu.setAge(-30);//输入的年龄有误

        //调用成员方法
        stu.show();//aa, 0 输出的是成员变量age的默认值0
    }
}

案例:学生类

//学生类
public class Student1 {
    //成员变量
    String name;
    //为了解决对象直接访问属性可能造成的数据安全隐患问题,将age设置为private权限。
   // int age;
    private int age;
    //设置类的成员变量为private权限时,就不可通过创建对象,对象.属性来给成员变量赋值。
    //访问类中private成员变量的方式是创建方法:
    // 获取成员变量值——get变量名();设置成员变量的值——set变量名(参数);变量名的首字母需要大写
    public int getAge(){
       return age;
    }
    public void setAge(int a){
        //为了避免造成对成员变量赋值时产生的数据安全隐患,比如age年龄不可能有负数,也不可能特别大,所以要在方法中添加条件判断。
        if(a < 0 || a > 120){
            System.out.println("输入的年龄有误");
        }else{
            age = a;
        }
    }

    //成员方法
    public void show(){
        System.out.println(name + ", " + age);
    }
}

代码重点图示:
在这里插入图片描述

private关键字使用

标准的编写:
把成员变量用private修饰;
提供对应的getXxx()/getXxx()方法。
代码:学生测试类

//学生测试类
public class StudentDemo {
    public static void main(String[] args){
        //创建对象
        Student stu = new Student();

        //set方法设置成员变量
        stu.setName("汪苏泷");
        stu.setAge(33);

        //调用成员方法
        // 输出的是两个变量之间使用逗号分隔。
        stu.show();//汪苏泷,33

        //也可以使用任意符号分隔
        System.out.println(stu.getName() + "---" + stu.getAge());//汪苏泷---33
        System.out.println(stu.getName() + "***" + stu.getAge());//汪苏泷***33
    }
}

代码:学生类

//学生类
public class Student {
    //定义成员变量
    private String name;
    private int age;

    //定义get/set方法
    public String getName() {
        return name;
    }

    public void setName(String n) {
        name = n;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int a) {
        age = a;
    }

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

this关键字

介绍:

  • this修饰的变量用于指代成员变量

  • 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量。

  • 方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量。

  • 使用this的情况
    解决局部变量隐藏成员变量的问题。

  • this:代表所在类的对象引用
    理解:方法被哪个对象调用,this就代表哪个对象。

案例:学生类

public class Student1 {
    //定义成员变量
    private String name;
    private int age;

    //定义get/set方法
    public String getName() {
        return name;
    }

    //引入this
    //为了代码的可读性,起名字一般需要有明确的含义。下边这个n不能明确显示出这是一个name变量。
//    public void setName(String n) {
//        name = n;
//    }
/*    public void setName(String name){
        name = name;
    }*/
    //当设置成为上述这种形式的时候,方法测试类出现错误,setName不可以实现赋值。
    //原因:在setName方法中,name = name的赋值只可以看到局部变量name,不能看到成员变量name。
//要想实现此功能,需要使用this关键字
    public void setName(String name){
        this.name = name;
        //此时的this.name表示的是成员变量name,name表示的是局部变量name
    }
    public int getAge() {
        return age;
    }

    public void setAge(int a) {
        age = a;
    }

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

案例:学生测试类

public class StudentDemo1 {
    public static void main(String[] args) {
        //创建对象
        Student1 stu = new Student1();

        //set方法设置成员变量
        stu.setName("汪苏泷");
        stu.setAge(33);

        //调用成员方法
        stu.show();//汪苏泷,33
    }
}

this引入图示:
在这里插入图片描述

this内存原理

理解:方法被哪个对象调用,那个方法里面的this就是哪个对象。
在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-01-11 23:51:23  更:2022-01-11 23:52:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:48:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码