JAVA学习笔记4
一、构造方法
一个类被实例化,也就是被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加以区分。如果在声明类的时候使用,便称之为静态类,顾名思义:静止的,管你其他啥类反正我就一直在这里,不离不弃。说白了,就是在调用类的成员变量或方法时,可以直接使用类名.方法名,而无需再去使用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、finasdfsafl 使用总结”一文中给出了明确解释。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。
this 关键字用来表示当前对象本身,或当前类的一个实例,通过 this 可以调用本对象的所有方法和属性。
this主要要三种用法:
1、表示对当前对象的引用!
2、表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名是进行区分!其实这是第一种用法的特例,比较常用,所以那出来强调一下。
3、用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。但是这里必须非常注意:只能引用一个构造方法且必须位于开始!
还有就是注意:this不能用在static方法中!所以甚至有人给static方法的定义就是:没有this的方法!虽然夸张,但是却充分说明this不能在static方法中使用!
说明在什么情况下需要用到this:
第一、通过this调用另一个构造方法,用发是this(参数列表),这个仅仅在类的构造方法中,别的地方不能这么用。
第二、函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽,此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。当然,在没有同名的情况下,可以直接用成员变量的名字,而不用this,用了也不为错,呵呵。
第三、在函数中,需要引用该函所属类的当前对象时候,直接用this。