JAVA学习笔记4——构造方法、静态和非静态、类的三个访问限定符、参数传值机制、Java包机制__package的使用、this关键字、创建一个对象

一、构造方法

  一个类被实例化,也就是被new的时候,最先执行的是构造方法,在java类中,如果不显示声明构造函数,JVM会给该类一个默认的构造函数。一个类可以有多个构造函数。构造函数的主要作用 :

  1.用来实例化该类。
  2.让该类实例化的时候执行哪些方法,初始化哪些属性。当一个类声明了构造函数以后,JVM 是不会再给该类分配默认的构造函数。

区分Java 类的成员方法和构造方法

①类的成员方法:简称方法, 用来实现类的各种功能,其格式为:

【方法修饰词列表】 返回类型 方法名(方法的参数列表)

  方法修饰词可以有0个或者任意个,方法修饰词包括:public private protected abstract static final synchronized strictfp;方法修饰词 public protected 和private 不能同时存在;abstract表示当前的方法为抽象方法,不能包含方法体,一般用在抽象类和接口中;

举例: public int mb_method( )

   public static void main (STring args[ ])

②类的构造方法:主要是来创建类的实例对象,完成新创建的实例对象的初始化工作。定义构造方法的格式为:

【构造方法修饰词列表】 类名 (方法参数列表)

{ 方法体 }

构造方法有以下三个特点

构造方法必须与类名相同,即类名就是构造方法名

构造方法不具有任何返回类型,即方法修饰词列表与类名之间不能添加任何单词,包括void,如果添加了,构造方法将变成普通的成员方法;

任何一个类都有构造方法。如果没有显式的定义类的构造方法,则系统会为该类定义一个默认的构造方法。这个默认的方法不含任何参数,如果类中显式的定义了构造方法,则系统将不会再创建默认的构造方法。

利用构造方法可以创建类的实例对象,其格式为
     new 构造方法名(构造方法调用参数列表)

二、静态和非静态

  在类中,用static声明变量的成员变量为静态成员变量,也称为类变量。类变量的生命周期和类相同,在整个应用程序执行期间都有效
  以static加以区分。如果在声明类的时候使用,便称之为静态类,顾名思义:静止的,管你其他啥类反正我就一直在这里,不离不弃。说白了,就是在调用类的成员变量或方法时,可以直接使用类名.方法名,而无需再去使用new一个类,然后再使用对象引用来调用,使用起来更便捷。而用static修饰的成员变量和方法跟上述类似。故使用static提高了共享性
  非静态方法之间可以互相调用,非静态方法也可以调用静态方法;但是静态方法不可以直接调用(未初始化的)非静态方法。由于 public static void main 作静态方法,所以遵循这个原则。但是 Java 可以通过对象名调用静态方法(对象名.静态方法)。Java 中不会导致语法错误(syntax error),但是不推荐这样使用,静态方法与非静态方法调用时应当绝对区分;而且其他 OOP 语言如 C#,Swift,Objective-C 都没有这样的语法。
  public void 修饰是非静态方法,该类方法属于对象,在对象初始化(new Object())后才能被调用;

  public static void 修饰是静态方法,属于,使用类名.方法名直接调用。

将数据和对这些数据的操作封装在一起(并没有开空间)

在这里插入图片描述

对象: 类的实例(占有实际的空间)

  即给类增加成员变量方法函数

1)类相当于造汽车的图纸,虽然知道了有哪些零件,但并没有实际的物件(空间)。

2)类可以实例化出多个对象,实例化出的对象占有实际空间(用来存储成员变量),即由图纸造出了汽车,每一辆汽车都是一个对象。

三、类的三大特性

在这里插入图片描述
  封装:函数的封装是一种形式,隐藏对象的属性和实现细节(函数内部),仅仅对外提高函数的接口和对象进行交互。类的访问限定符可以协助其完成封装

四、类的三个访问限定符

在这里插入图片描述
1.public:公有的,类的成员可以从类外直接访问

2.private/protected:类的成员不能从类外直接访问

3.类的每个访问限定符可以多次在类中使用,作用域为从该限定符开始到下一个限定符之前/类结束

4.类中如果没有定义限定符,则默认为私有的(private

5.类的访问限定符体现了类的封装性

五、参数传值机制

  Java中所有的参数都是“值传递”,也就是传递的是值的副本。也就是说,我们得到的是原参数的复印件,而不是原件,因此复印件改变不会影响原件。

  • 基本数据类型参数的传值
      传递的是值的副本,副本改变不会影响原件

  • 引用类型参数的传递
      传递的是值的副本。但引用类型指的是“对象的地址”。因此,副本和原参数都指向了同一个“地址”,改变“副本指向地址对象的值,也意味着原参数指向对象的值也发生了改变”。

六、Java包机制__package的使用

  包机制是Java中管理类的重要手段。开发中,我们会遇到大量同名的类,通过包我们很容易对解决类重名的问题,也可以实现对类的有效管理。包对于类,相当于文件夹对于文件的作用。

  我们通过packge实现对类的管理,packge的使用有两个要点:

  1.通常是类的第一句非注释性语句。
  2.包名:域名倒着写即可,再加上模块名,便于内部管理类。例如:com.baidu.test

注意:1.写项目时都要加包,不要使用默认包
   2.com.baidu和com.baidu.test,这两个包没有包含关系,是两个完全独立的包,只是逻辑上看起来后者是前者的一部分。
   3.com.baidu.test在文件夹中的显示,就是com是一个文件夹,baidu是com文件夹中的文件夹,test又是baidu文件夹中的文件夹。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

七、this关键字

  Java关键字this只能用于方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this(没有创建类的实例),这在“Java关键字static、final 使用总结”一文中给出了明确解释。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this
  this 关键字用来表示当前对象本身,或当前类的一个实例,通过 this 可以调用本对象的所有方法和属性

this主要要三种用法:
  1、表示对当前对象的引用!
  2、表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名时进行区分!其实这是第一种用法的特例,比较常用,所以那出来强调一下。
  3、用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。但是这里必须非常注意:只能引用一个构造方法且必须位于开始
  还有就是注意:this不能用在static方法中!所以甚至有人给static方法的定义就是:没有this的方法!虽然夸张,但是却充分说明this不能在static方法中使用!

说明在什么情况下需要用到this:
  第一、通过this调用另一个构造方法,用法是this(参数列表),这个仅仅在类的构造方法中,别的地方不能这么用。
  第二、函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽,此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。当然,在没有同名的情况下,可以直接用成员变量的名字,而不用this,用了也不为错,呵呵。
  第三、在函数中,需要引用该函所属类的当前对象时候,直接用this。

八、创建一个对象:

一个对象的建立过程:

Person p= new Person(“zhangsan”,20);

1.找到Person.class文件并加载到内存中

2.执行static代码块

3.在堆内存中开辟空间,分配内存地址(main函数开始)

4.在堆内存中建立对象的特有属性,并进行默认初始化

5.对属性进行显示初始化

6.对对象进行构造代码块初始化

7.对对象进行对应的构造函数初始化

8.将内存地址赋值给栈内存中的p变量

初始化过程:默认初始化,显式初始化,构造初始化
显式初始化即为手工给予初值,否则为隐式初始化,将内容设置为默认值。
  this的本质就是“创建好的对象的地址”!由于构造方法调用前,对象已经创建。因此,在构造方法中也可以使用this代表“当前对象”

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

特立独行の猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值