首页 > 代码库 > 大数据JAVA基础第九天

大数据JAVA基础第九天

1.JavaBean的特点:

  • private 成员属性
  • public成员方法
  • 有get/set方法对成员变量进行赋值/取值
  • 有空构造方法

符合这些条件的称为标准的JavaBean。

2.构造方法(也叫构造器)

构造方法(也叫构造器)是一种特殊的方法,定义的位置是在类中,成员方法外,和成员变量,成员方法是平级关系,定义构造方法和定义一般的成员方法很像,它的特点是与类同名,但是没有返回值,其语法格式如下:

 

[修饰符] 构造方法名(形参列表){

    //零到多条可执行语句组成构造方法的执行体

3.构造方法定义时注意事项:

1.构造方法必须和类同名

2.构造方法没有返回值,也不能使用void,一旦加了返回值或者void,那么这个方法就是一个成员方法,而不是构造方法了

4.默认的构造方法

当定义一个类的时候,如果没有显式的定义任何构造方法,就像之前的例子,都没有定义构造方法,这时,系统会给这个类加上一个默认的无参构造方法,并且构造方法里没有任何语句。

例如:

class Demo{

    //public Demo(){}

    //如果没有定义任何构造方法的话,系统自动加上一个空参构造方法

    public void show(){

       System.out.println("hello world");

    }

}

 

一旦有自定义构造方法,系统就不会加上任何构造方法了

class Demo{

    public Demo(int id){

       System.out.println("这是有一个参数的构造方法");

    }

}

5.构造方法的使用

实际上,在程序中使用new关键字创建一个类的实例化对象的时候,就是去调用该类的相应的构造方法,

此时应注意,根据构造方法的形参列表的不同来调用不同的构造方法,调用不存在的构造方法肯定编译报错

6.this关键字

this关键字用来指向当前对象,根据this关键字出现的位置不同,this作为对象的引用有两种情况:

  • 在构造方法中引用该构造方法正在初始化的对象
  • 在方法中引用正在调用该方法的对象

this关键字的使用场景之一,就是让类中的一个方法去访问类中的另一个实例方法或变量,例如,定义了一个Person类,其中定义了两个方法,一个叫sayHi()方法,另一个speak()方法,在speak()方法中需要先调用sayHi()方法,该如何定义Person类?

看下面的示例代码:

class Person{

    public Person(){}

    //打招呼方法

    public void sayHi(){

       System.out.println("Hello");

    }

    //谈话方法

    public void speak(String content){

       //想要使用到Person类的sayHi方法,先创建一个对象,然后再调用这个对象的实例方法

       Person p = new Person();

       p.sayHi();

       System.out.println("我想说的是:" + content);

    }

}

 

class PersonTest{

    public static void main(String[] args){

       Person per = new Person();

       per.speak();

    }

}

7.在测试类中首先实例化一个Person对象per,然后调用这个对象的speak方法,但是在这个方法被调用的时候,

又创建了一个Person对象p,然后调用了对象p的sayHi方法,所以,在程序运行的过程中,实际上是产生了两个Person实例对象。

 这个程序可以实现方法的调用,但是这样做好么?程序在speak方法里创建的Person对象目的其实很简单,就是为了调用一次这个对象的sayHi方法。

8.static关键字

 

static 关键字的字面直译是“静态的”,实际上这个说法十分模糊,根本无法说明static的真正作用。

static的真正作用就是用于区分成员变量,方法,内部类,初始化块(后面讲)这四种成员是属于类本身还是属于这个类的实例。

在类定义中,static相当于一个标志,有static修饰的成员属于类本身,没有static修饰的成员属于该类的实例对象。

所以,为了区分这两种不同的成员变量,凡是有static修饰的成员变量/成员方法,称为类变量/类方法,没有static修饰的成员变量/成员方法称为实例变量/实例方法

下图为Java中变量的分类图:

                             技术分享

9.static修饰类的成员变量和成员方法(即:类变量,类方法)

静态成员变量(类变量)属于类,可用类名或对象名两种方式进行访问

静态成员方法(类方法)属于类,可用类名或对象名两种方式进行访问

 

只要类存在,程序中就可以访问到类变量,类变量访问的语法

类名.类变量 Student.name

只要实例存在,程序中就可以访问到该实例的实例变量,访问实例变量的语法

实例名.实例变量 s.id

当然,类变量也可以通过该类的实例来访问,通过实例访问类变量的语法

实例名.类变量 Student.name/s.name

10.static关键字的特点

被static关键字修饰的部分,有如下特点

  • 随着类的加载而加载
  • 优先于对象存在(因为类的加载优先于对象的创建)
  • 被类的所有实例对象共享(存在于方法区中的静态区,如果是一个类变量的话,任何一个对象对该变量进行修改,都会在其他对象中得到体现),这也是我们在定义一个类时,判断是否使用静态关键字的标准
  • 可以通过类名访问(类名.静态变量名/类名.静态方法名),也可以使用对象名来访问,推荐使用类名调用,因为静态变量/方法是属于类的

11.什么时候使用static关键字?使用static关键字的标准

当一个变量或者方法属于一个类,而不是属于这个类的实例对象时,就可以使用static来修饰,这样就可以使用类名.成员(变量/方法)的方式访问这个static变量/方法。

所有这个类的实例对象都能看到对静态变量(类变量)的更改

12.static方法重点注意事项

  • 静态方法(类方法)中不能使用this关键字,this关键字代表的是当前对象的引用,但是static关键字修饰的方法是属于类的,随着类的加载而存在,但当类进行加载时,此时实例对象还没有被创建出来,这时是无法使用this关键字的
  • 静态方法只能访问静态成员变量和静态成员方法

13.static内存图

被static修饰的变量或者方法存在方法区中的静态区

技术分享

14.static关键字注意事项

static关键字注意事项

    A:在静态方法中不能使用this关键字

      如何理解呢?

       静态是随着类的加载而加载,this是随着对象的创建而存在。

       由于类比对象优先存在,所以静态比对象先存在。

    B:静态方法只能访问静态的成员变量和静态的成员方法

       静态方法访问的是:

       成员变量:只能访问静态变量

       成员方法:只能访问静态成员方法

       非静态方法访问的是:

           成员变量:可以是静态的(因为类已经加载了,成员方法当然可以调用),也可以是非静态的

           成员方法:可是是静态的成员方法(因为类已经加载了),也可以是非静态的成员方法。

    简单记:

       静态只能访问静态。

15.静态变量和实例变量的区别

所属不同

  • 静态变量属于类,所以也称为为类变量
  • 实例变量属于实例对象,所以也称为实例变量

内存中位置不同

  • 静态变量存储于方法区中的静态区
  • 实例变量存储于堆内存

在内存出现的时间不同

  • 静态变量随着类的加载而加载,随着类的消失而消失
  • 实例变量随着对象的创建而存在,随着对象的消失而消失

调用方式不同

  • 静态变量可以通过类名调用,也可以通过对象调用
  • 实例变量只能通过对象名调用

 

所属

内存位置

出现时间

调用

静态变量

方法区的静态区

随类加载而加载

类名调用,对象名调用

实例变量

对象

堆内存

随对象创建而存在

对象名调用

16.实例变量和局部变量的区别

在类中的位置不同

实例变量 在类中,并且在方法外

局部变量 方法内或者方法声明上(形参)

在内存中的位置不同

实例变量 堆内存

局部变量 栈内

生命周期不同

实例变量 随着对象的存在而存在,随着对象的消失而消失

局部变量 随着方法的调用而存在,随着方法的调用完毕而消失

初始化值不同

实例变量 有默认的初始化值

局部变量 没有默认的初始化值,必须先定义,赋值,才能使用。

 

 

声明位置

内存位置

生命周期

初始值

局部变量

方法内,形参上

栈内存

随方法调用而存在

必须先定义,赋值再使用

实例变量

类内,方法外

堆内存

随对象创建而存在

有默认初始值

17.   main方法是静态的

public static void main(String[] args) {}

  public 被jvm调用,访问权限足够大。

  static 被jvm调用,不用创建对象,直接类名访问

  void被jvm调用,不需要给jvm返回值

  main 一个通用的名称,虽然不是关键字,但是被jvm识别

  String[] args 以前用于接收键盘录入的

18.main方法的格式讲解:

       public static void main(String[] args) {...}

      

       public:公共的,访问权限是最大的。由于main方法是被jvm调用,所以权限要够大。

       static:静态的,不需要创建对象,通过类名就可以。方便jvm的调用。

       void:因为我们曾经说过,方法的返回值是返回给调用者,而main方法是被jvm调用。返回内容给jvm没有意义。

       main:是一个常见的方法入口。我见过的语言都是以main作为入口。

       String[] args:这是一个字符串数组。

           这个东西为了接收键盘录入的数据的。

           格式是:

              java MainDemo hello world java

19.如何使用API文档

点击显示,找到索引,看到输入框

以Scanner举例

在输入框里面输入Scanner,然后回车

看包

    java.lang包下的类不需要导入,其他的全部需要导入。

    要导入:

    import java.util.Scanner;

再简单的看看类的解释和说明

看类的结构

    成员变量   字段摘要  

    构造方法   构造方法摘要

    成员方法   方法摘要

学习构造方法  

    A:有构造方法   就创建对象

    B:没有构造方法 成员可能都是静态的,这样的类也不需要构造方法,直接用类名就行

看成员方法

    A:左边

       是否静态:如果静态,可以通过类名调用

       返回值类型:人家返回什么,你就用什么接收。

    B:右边

       看方法名:方法名称不要写错

       参数列表:人家要什么,你就给什么;人家要几个,你就给几个

 

大数据JAVA基础第九天