Java 类与对象,封装构造方法

本文介绍了Java中的类与对象,详细讲解了类的定义、对象的创建与使用,以及封装的概念和步骤,包括成员变量与局部变量的区别、封装的原则和优化方法,如构造方法的使用,最后给出了符合JavaBean规范的代码示例。
摘要由CSDN通过智能技术生成

类与对象

1.什么是类?
类是一组相关属性和行为的集合,可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述此类事物

2.什么是对象
一类事物的具体体现,对象是类的一个实例,必然具备该类事物的属性和行为。

3.类与对象的关系
类是对一类事物的描述,是抽象的
对象是一类事物的实例,是具体的
类是对象的模板,对象是类的实体

类的定义

事物与类的对比
现实世界的一切事物,
属性:事物的信息状态;行为:事物能够做什么
java 中用class 描述事物也是如此
成员变量:对应事物的属性,成员方法:对应事物的行为

类的定义格式

 public class className{
  //成员变量
  //成员方法
 }

定义类:就是定义类的成员,包括成员变量和成员方法
成员变量:和以前定义的变量完全一样,只不过是位置发生了改变,在类中方法外。
成员方法:和以前定义方法几乎是一样的,只不过是把static 去掉

类定义的格式举例

public class Student{
   //成员变量
   String name;
   int age;
   
   //成员方法
   public void study(){
       System.out.println("好好学习")}
   
   public void eat(){
       System.out.println("好好吃饭")}
}

对象的使用

对象的使用格式
创建对象

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

使用对象访问类中的成员方法及成员变量

对象名.成员变量;
对象名.成员方法();

对象的使用举例格式

public class Test_Student{
    public static void main(String[] args){
        Student s = new Student();
        //直接输出成员变量
        System.out.println(s.name);
        s.name("张俊杰");
        s.age(18);
        
        //调用成员方法
        s.study();
        s.eat();
        
}
}

成员变量的默认值
在这里插入图片描述

类与对象的练习

定义手机类

public class Phone{
    String brand;// 品牌
    int price; // 价格
    String color ; 颜色
   
    //成员方法
    //打电话
    public void  call(String name){
        System.out.println("给"+name+"打电话");
}
    //发短信
    public void sendMessage(){
        System.out.println("发短信");
}
}

定义测试类

public class Test02Phone{
    public static void main(String[] args){
        //创建对象
        Phone p= new Phone();
        // 输出成员变量的值
        System.out.println(p.brand);
        System.out.println(p.price);
        System.out.println(p.color);
        
        p.brand="锤子";
        p.price=12.9;
        p.color="橙色";
        
        //调用成员方法
        p.call();
        p.sendMessage();
        
}
}
对象的内存图

在这里插入图片描述
两个对象,调用同一方法的内存图
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
1.定义的位置不同

  • 成员变量:类中,方法外
  • 局部变量:方法中,或者方法声明上(形式参数)

2.作用范围不一样

  • 成员变量:类中
  • 局部变量:方法中

3.初始化值不同

  • 成员变量:有默认值
  • 局部变量:没有默认值,必须先定义,赋值,最后使用

4.在内存中的位置不同

  • 成员变量:堆内存
  • 局部变量:栈内存

5.生命周期不同

  • 成员变量:随对象的创建而存在,随着对象的消失而消失
  • 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
封装

原则:将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。

封装的步骤:

  • 使用private 关键字来修饰成员变量
  • 对需要访问的成员变量,提供对应的一对getXXX 和setXXX 方法

封装的操作
private 的含义
1.private 是一个权限修饰符,代表最小权限
2.可以修饰成员变量和成员方法
3.被private 修饰后的成员变量和成员方法,只有在本类中才能访问

private 的使用格式

private  数据类型 变量名;

1.使用private 修饰成员变量,代码如下:

public class Student{
    private String name;
    private int age;
    
}

2.使用getXXX和setXXX 方法

public class Student{
    private String name;
    private int age;
    
    public void setName(String n){
       name = n;
}
    public String name(){
       return name; 
}

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

封装优化关键字this

this代码所在类当前对象的引用(地址值)即对象自己的引用。

方法被哪个对象引用,方法中的this 就代表那个对象,即谁在调用,this就代表谁。

this 的使用格式

this.成员变量名;

使用this修饰方法中的变量,解决成员变量被隐藏的问题,代码如下。

public class Student{
    private String name;
    private int age;
    
    public void setName(String name){
       this.name = name;
}
    public String name(){
       return name; 
}

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

方法中只有一个变量名时,默认也是使用this修饰,可以省略不写。

封装优化方法2-- 构造方法

当一个方法被创建的时候,构造方法用来初始化对象,给对象的成员变量赋值初始。

无论你是否自定义构造方法,所有类都有构造方法,因为Java自动提供了一个午餐构造方法,一旦自己定义了构造方法,Java 默认提供的无参构造方法就会自动失效。

构造方法的定义格式

修饰符 构造方法名(参数列表){
// 方法体
}

构造方法的写法上,方法名和它所在的类名相同,它没有返回值,所以不需要返回值类型,甚至不需要void ,使用构造方法后代码如下:

public class Student{
    private String name;
    private int age;
    //无参构造方法
    public Student(){ }
    //有参构造方法
    public Student(){
        this.name=name;
        this.age=age;

}
}

注意事项
1.如果你提供构造方法,系统会自动提供无参构造方法
2.如果你提供了构造方法,系统将不再提供无参构造方法
3.构造方法是可以重载的,即可以定义参数也可以不定义参数

标准代码

JavaBean 是java 语言编写类的一种规范,符合JavaBean的类,要求类必须是具体的公共的,并且具有无参的构造方法,提供用来操作成员变量的get 和set方法。

编写符合JavaBean 规范的类,以学生类为例,标准代码如下。

public 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.name=name;
   }
   public int getAge(){
       return age;
   }
}

测试类,代码如下

public class TestStudent{
    public static void main(String[] args){
        //无参数构造的使用
        Student s =  new Student();
        s.setName("张俊杰");
        s.setAge(11);
        
        //有参构造的使用
        Student s =  new Student("张俊杰",18);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值