JAVA学习-面向对象

Posted burning-yu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA学习-面向对象相关的知识,希望对你有一定的参考价值。

JAVA学习-面向对象(一)

这个篇目主要针对类和对象的赋值使用、内存中的样子、值传递等进行总结。关注面向对象的封装性

一.类和对象

类:类是一种模板,抽象层面的东西,描述一类事物的状态和行为,JAVA实现类时,其中包含了属性(字段)方法

对象:是一个具有自己特点的实例,具体层面的东西,描述了该对象的状态和行为

JAVA中的成员方法、属性要严格按照类、属性为前缀去调用!!!,更好理解面向对象

二.实例化

new 关键字从类模板实例化一个对象,建立了类和对象之间的联系其做了几件事:

  • 为对象分配了空间,返回一个该对象的引用
  • 属性初始化:成员变量转化为对象变量后,救获得了初值
  • 构造:调用此类的构造方法
  1. 引用赋值和new实例化的关系,类似C中的指针,具体的可参照下图

技术图片

技术图片

对象赋值其实是两个引用指向了同一个对象,通过其中一个操作对象,另一个去访问时也会发生变化!

技术图片

当堆中对象无引用时(相当于不能访问到了),JAVA就会自动回收这片内存,类似C的释放空间

技术图片

  1. 引用本身存储在栈中,其内存大小为8字节(64位机),而对象大小由其所含属性等决定
  2. 引用 = null 可以帮助释放内存

三.构造器

  1. 写法

    public class Student{
        String name;
        int age
        //构造函数,无返回值,用类名作为函数名字
        Student(){
            
        }
        //有参构造,重载
        Student(String name){
            this.name = name;
        }
        //this()调用其他构造函数,但必须有出口!
        Student(String name, int age){
            this(name);
            this.age = age
        }
    }
    
  2. 当没显示提供构造函数时,编译器默认提供一个隐式无参的构造函数,空的,什么都不干,只是为了能调用

  3. 一旦自己写了构造函数,默认提供的隐式无参构造函数就无了,一个好的习惯是,无论何时自己写一个无参的构造方法,保留这个无参构造器

  4. 构造器可以重载

  5. this() 来调用其他构造函数,但必须写在构造器的第一行

四.this关键字

this在语义上可看成"本对象的xxx",是对象层面的东西,this关键字指向的是当前对象的引用,只有实例化后才会真正存在!

当用到this时,可假想一下该类被实例化成对象时调用自己的一些东西,这个this就是此时实例化的对象

  1. 调用类中的属性:this.属性名称,指的是访问类中的成员变量,用来区分成员变量和局部变量(重名问题)
  2. 调用类中的方法:this.方法名称,用来访问本类的成员方法
  3. 调用类构造方法:this();访问本类的构造方法,()中可以有参数的 如果有参数 就是调用指定的有参构造
    • this()只能用在构造方法中,且必须是构造器的第一条语句!

五.static关键字

static是静态修饰符,把变量、属性变为类这一层次的东西!内存和值跟随类创建销毁,可以直接用类名调用

public class Main{
    public static void main(){
        //在该类中想调用该类资源,只能调用static的属性和方法
        Main.test();
        Main.name = "change";
        //绝不运行用this!!!
       
    }
    public static int name = "这是一个静态方法"
    public static void test(){
        System.out.println("这是一个静态方法");
    }
}
  1. 使用static关键字修饰一个属性:声明为static的变量实质上就是全局变量,其内存是随类产生销毁的,高于对象层次

  2. 使用static关键字修饰一个方法:在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法(类调用)

  3. 限制:

    • 它们仅能调用其他的static 方法,反过来是可以的(普通方法可访问static方法)
      它们只能访问static数据。

    • 它们不能以任何方式引用this或super。因为this是对象层次的,甚至没创建对象就调用static,哪来this

    • 不允许用来修饰局部变量

六.传参

JAVA本质都是值传递,相当于形参是单独开辟了一个空间,把实参的值拷贝过来而已,在函数中修改参数,实际上是修改的形参的值,实参不会变

而引用传过去后,虽然也是拷贝了一个引用,但实参和形参指向了同一个对象,所以通过形参引用去修改对象,实参那里也会反应出来(就和指针一样的)

public class Main{
    public static void main(){
       
    }
    
}

七.程序结构

用一个Main类来作为程序入口,组织主要逻辑。其他类不要包含main方法,不然会搞得特别混乱!

八.封装

目的:高内聚,低耦合

表现:数据隐藏,对外提供接口来取得数据,以及带条件的操作数据

好处:模块化、信息隐藏、代码重用、插件化易于调试、具有安全性

实现:访问权限符+set/get方法

class Person{
  //属性是成员变量,私有化属性,使得其他对象不能直接访问属性
  private String name;
  private int age;
  //参数及方法内定义的变量是局部变量
  public void setName(String name){
  this.name = name;
  }
  public String getName(){
  return name;
  }
}

访问权限符:

技术图片

其中package即默认值,当不写的时候就是package


以上是关于JAVA学习-面向对象的主要内容,如果未能解决你的问题,请参考以下文章

Java中面向对象的三大特性之封装

java学习---面向对象进阶

Java面向对象学习目录

PHP面向对象之选择工厂和更新工厂

Java学习 -- 面向对象概述与封装性

Java学习 -- 面向对象概述与封装性