【类与对象】详述类(封装)

​​​​​​​

目录

前言

成员变量

成员方法 

方法重载Overload  

 可变参数

构造方法

对象的创建

this关键字

访问修饰符

番外

基本类型的封装

var局部变量

对象数组​​​​​​​


前言

Java是一种面向对象语言,面向对象编程主要体现在封装性、继承和多态。而本文中将详细讲类的封装

什么是类?

类是Java程序的基本要素,由关键字class定义。

class 类名{

               类体的内容

}

注:类名首字母使用大写字母,类名最好任意识别。

 类使用类体来描述所抽象的属性和行为(类声明之后的一对大括号以及它们之间的内容称为类体。类体的内容由变量(属性)和方法(行为)组成。【方法,其实也就是c语言里面的函数】

成员变量

访问修饰符   属性类型  属性名;

eg:public  int  a;

1. 成员变量的类型可以是Java中的任何一种基本类型,包括基本类型和引用类型。

2. 成员变量的默认值:在声明成员变量时如果没有指定初始值,Java编译器会为其指定默认值。【boolean:false;byte、short、int和long变量:0;char:'\0';float和double:0.0;“引用型”变量(数组及对象):null】

3. 属性注意细节:

1)属性的定义语法同变量【示例:访问修饰符 属性类型 属性名;( 访问修饰符:控制属性的访问范围 ;四种访问修饰符:public,protected;默认;private;)】 

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

3)属性如果不赋值,有默认值,规则和数组一致。

成员方法 

访问修饰符  返回数据类型  方法名(形参列表){//方法体

        语句;

        return 返回值;

}

1. 方法的使用 

  • 访问修饰符(作用是控制 方法的范围) 如果不写默认访问【四种:public,protected,默认,private】
  • 返回数据类型:1)一个方法最多只有一个返回值【返回值的类型必须与return值的类型一致或兼容】;2)返回类型可以为任意类型,包含基本类型或引用类型(数组,对象);3)方法是void,则方法体中可以没有return语句(或写 return;)
  • 方法名:遵循驼峰命名法(第一个单词首字母小写,其余单词的首字母均大写)
  • 参数列表(形参列表):1)一个可以可以有0个参数,也可以有多个参数,中间用逗号隔开;2)参数类型可以为任意类型,包含基本类型或引用类型;3)调用带参数的方法时,一定对应着参数列表传入相同类型或兼容类型的参数;4)方法定义时的参数称为形式参数(形参),方法调用时的传入参数称为实际参数(实参),实参和形参的类型要一致或兼容、个数、顺序必须一致

 2. 方法的调用:

  • 同类中的方法直接调用
  • 跨类的方法调用:通过对象名调用:对象名.方法名【eg:A.b()】-----跨类的方法调用和方法的访问操作符有关

 3. 方法注意细节:

  1. 执行方法时,就创建一个新的受保护的独立空间(栈空间)
  2. 方法的局部变量是独立的,不会相互影响
  3. 成员方法传参机制:基本数据类型传递的是值(值拷贝)(形参不会影响实参),引用类型传递的是地址(形参影响实参)
  4. 方法不能嵌套定义

 

class Cat{
    //成员变量
    private String name;
    //成员方法
    public void Playing(){
        System.out.println("Cat is playing");
    }
}

方法重载Overload  

  • 基本介绍: java中允许同一个类中,多个同名方法的存在,当要求 形参列表不一致!
  • 优点: 代码美观(减少起名)
  • 注意事项: 1)方法名:必须相同; 2)参数列表:必须不同(参数类型或个数或顺序,至少有一样不同,参数名无要求); 3)返回类型:无要求 【只有返回类型不同或者参数列表中的名称不同不构成重载】​​​​​​​
 public int sum(int n1,int n2){
        return n1 + n2;
    }
    public int sum(int n1,int n2,int n3){
        return n1 + n2 + n3;
    }
    public double sum(double n1,double n2){
        return n1 + n2;
    }

 可变参数

  • 概念:java允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法就可以通过可变参数实现
  • 基本语法: 访问修饰符 返回类型 方法名(数据类型…形参名){}
  • 注意细节:1. 可变参数的实参可以为0个或任意多个 ; 2. 可变参数的本质就是数组; 3. 可变参数可以同普通类型的参数放在形参列表,但必须保证可变参数在最后; 4. 一个形参列表中只能出现一个可变参数
public int sum(int...nums){
        int total = 0;
        for (int i = 0; i < nums.length; i++) {
            total += nums[i];
        }
        return total;
    }

构造方法

  1. 基本介绍

    • 构造方法:类的一种特殊方法,也叫构造器(constructor),主要作用是完成对新对象的初始化
    • 特点:
      • 方法名和类型相同
      • 没有返回值
      • 在创建对象时,系统会自动地调用该类的构造器完成对象的初始化
  2. 基本语法

    [修饰符] 方法名 (形参列表){ 方法体;}

    • 构造器的修饰符可以默认,也可以是public,protected、private
    • 构造器没有返回值
    • 方法名和类名字必须一样
    • 参数列表和成员方法一样的规则
    • 构造器的调用系统完成
  3. 注意细节

    1. 一个类可以定义多个不同的构造器(即构造器重载 );2. 构造器名和类名要相同 并且没有返回值; 3. 构造器是完成对象的初始化,表示创建对象; 4. 在创建对象时,系统自动调用该类的构造方法; 5. 如果类中没有构造器,系统会自动给类生成一个默认无参构造器(也叫默认构造器),使用javap指令反编译可以查看;6. 在类中定义了一个构造器,默认的构造器就会被覆盖,要使用默认无参构造器必须进行显式的定义【即:Person(){}】

class Person{
    public Person(){
        //无参构造器
    }
    public Person(int name){
        //有参构造器
    }
}

对象的创建

1.创建对象

 1)先声明在创建 :Cat cat;//声明对象   cat cat=new Cat();//创建

2)直接创建 :Cat cat=new Cat();

Java内存结构:

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

堆:存放对象(Cat   cat,数组等)

方法区:常量池【常量、字符串等】,类加载信息

Java创建对象的流程:

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

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

3)把地址赋给所起的名字(eg:dog)

public static void main(String[] args) {
        Dog dog = new Dog("Mike");
        Dog dog1;
        dog1 = new Dog("Jimmy");
        dog.play();
        //直接调用方法
        new Dog("Tom").play();
    }

this关键字

基本介绍:this代表当前对象,可以用来访问本类中的属性、方法、构造器

注意细节:1. this用于区分当前类的属性和局部变量 ;2.访问成员方法的语法:this.方法名(参数列表) 3.访问构造器语法:this(参数列表);注意只能在构造器中使用 ;4. this不能在类定义的外部使用,只能在类定义的方法中使用

class  Dog{
    private int age;
    public String name;
    public Dog(String name){
        this.name = name;
    }
    public Dog(String name,int age){
        this(name);
        this.age = age;
    }
}

基本介绍:包是Java语言有效地管理类的一个机制。在不同Java源文件中可使用包名区分名字相同的类

包的作用: 1、区分相同名字的类 2、当类很多时,可以很好的管理类 3、控制访问范围

本质:创建不同的文件夹来保存类文件

基本语法:用package来声明包文件

命名规则:只能包含数字、字母、下划线、小圆点,但不能用数字开头,不能是关键字或保留字

导入包:import语句来导入包,可以在类中引入包中的类和接口

package  包名;

例如:package sun;//sun包

package sun.sunrise;//在sun包里面的sunrise包

使用细节:

 1、package需要放在类的最上面,一个类中最多,只有一句package

2、import指令,位置放在package的下面,在类定义前面,可以有多句(没有顺序要求)

访问修饰符

java提供了四种访问控制修饰符控制方法和属性(成员变量)的访问权限(范围)

  1. 公开级别:用public修饰,对外公开
  2. 受保护级别:用protected修饰,对子类和同一个包中的类公开
  3. 默认级别:没有修饰符号,向同一个包的类公开
  4. 私有级别:用private修饰,只有类本身可以访问,不对外公开
修饰符的访问范围
访问级别 访问控制修饰符 同类 同包 子类 不同包
公开 public
受保护 protected ×
默认(友好) 没有修饰符 × ×
私有 private × × ×

 使用细节:

  1. 修饰符可以用来修饰类中 的属性,成员方法以及类
  2. 只有默认的和public才能修饰类,并且遵循上述访问权限的特点
  3. 成员方法的访问规则和属性完全一样

番外

基本类型的封装

Java的基本数据类型包括boolean、byte、short、char、int、long、float和double。Java在java.lang包中提供了与基本数据类型相关的类Boolean、Byte、Short、Character、Integer、Long、Float和Double,实现了对基本数据类型的封装。

        char c='A';
        if(Character.isLowerCase(c)){
            c=Character.toLowerCase(c);
        }
        System.out.println(c);

var局部变量

var可以声明局部变量(仅限于在方法体内使用var声明局部变量

var是保留类型名称,不是关键字。在JDK10开始,var也可用作变量或方法的名称。但是,var不能再用作类或接口的名称(如果维护的代码需要使用JDK10之后的环境,就需要修改类名或接口名是var的那部分代码 

void f(double d){
        var width = 108;
        var height = d;
        var date = new date();
        width = 3.14;//非法,width的类型确定为int类型
        var str;//非法,无法判断str类型(必须显式指定)
        var what = null; //非法,无法判断类型
    }

注意事项:

1.  在类的类体中,不可以用var声明成员变量(只能在方法体内)

2. 使用var声明局部变量时,必须显式地指定初始值(初始值不能为null)

3.方法的参数和方法的返回类型不可以用var来声明

对象数组

概念:数组的元素的对象

        Dog[] dogs=new Dog[10];
        for(int i=0;i

总结:类是组成Java源文件的基本元素,一个源文件是若干个类组成的,类体由成员八零和方法组成。类的构造器可以初始化对象,导入包可以使用包内的类和接口,访问修饰符控制了方法和属性的访问范围。 

你可能感兴趣的:(java,java)