大数据第九天

JavaBean的特点:

private 成员属性

public 成员方法

有get/set方法对成员变量进行赋值/取值

有空构造方法

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

构造方法(也叫构造器)

定义的位置是在类中,成员方法外,和成员变量、成员方法是平级关系。

特点是:与类同名,没有返回值。

语法格式如下:

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

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

}

例如:

class Student{

  public Student(){

    System.out.println("这是一个学生类的空参构造方法");

  }

}

构造方法能重载。

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

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

2.构造方法没有返回值,也不能使用void,一旦加了返回值或者void,

 那么这个方法就是一个成员方法,而不是构造方法了。

默认的构造方法

当定义一个类的时候,如果没有显式的定义任何构造方法,这时,

系统会给这个类加上一个默认的无参构造方法,并且构造方法里没有任何语句。

class Demo{

    //public Demo(){}

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

    public void show(){

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

    }

}

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

class Demo{

    public Demo(int id){

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

    }

}

构造方法的使用

实际上,在程序中使用new关键字创建一个类的实例化对象的时候,就是去调用该类的相应的构造方法,此时应注意,根据构造方法的形参列表的不同来调用不同的构造方法,调用不存在的构造方法肯定编译报错

class TestDemo{

    //Demo d = new Demo(); //error,没有这样的构造方法

    Demo d = new Demo(10); //调用的是自定义的,有一个参数的构造方法

}

标准JavaBean练习

定义一个员工类,自己分析出几个成员,然后给出成员变量,构造方法,getXxx()/setXxx()方法,以及一个显示所有成员信息的方法。并测试。

class Employee{
private String employeeId;
private String name;
private int age;

public String getEmployeedId(){
return employeeId;
}
public void setEmployeeId(String employeeId){
this.employeeId = employeeId;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public void show(){
System.out.println("员工编号是:"+employeeId+"的这个人是:"+name+"的年龄是:"+age);
}
}
class EmployeeTest{
public static void main(String[] args){
Employee e = new Employee();
e.setEmployeeId("9527");
e.setName("唐伯虎");
e.setAge(18);
e.show();
}
}

自定义类练习:

定义一个算数类MyMath,提供基本的加减乘除功能,然后进行测试。

根据面向对象编程思想,应该把方法操作的数据封装成成员变量,然后再使用方法进行操作,但十分麻烦,在一些简单的应用中,可以不用封装成成员变量,直接定义方法,使用时把操作数当成实参进行传参即可。

import java.util.Scanner;
class MyMath{
public int add(int a,int b){
return a+b;
}
public int sub(int a,int b){
return a-b;
}
public int mul(int a,int b){
return a*b;
}
public int div(int a,int b){
return a/b;
}

}
class MyMathTest{
public static void main(String[] args){
Scanner sc =new Scanner(System.in);
System.out.println("请输入第一个操作数: ");
int firstNumber = sc.nextInt();
System.out.println("请输入第二个操作数: ");
int secondNumber = sc.nextInt();
MyMath mm = new MyMath();
System.out.println("加法的结果是: "+mm.add(firstNumber,secondNumber));
System.out.println("减法的结果是: "+mm.sub(firstNumber,secondNumber));
System.out.println("乘法的结果是: "+mm.mul(firstNumber,secondNumber));
System.out.println("除法的结果是: "+mm.div(firstNumber,secondNumber));
}
}

this关键字

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

在构造方法种引用该构造方法正在初始化的对象

在方法中引用正在调用该方法的对象

this关键字使用情景:

让类中的一个方法去访问类中的另一个实例方法或变量;

在构造方法中,对成员变量进行初始化。

static关键字

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

类变量/类方法:凡是有static修饰的成员变量/成员方法;

实例变量/实例方法:没有static修饰的成员变量/成员方法。

static修饰类的成员变量和变量方法(类变量,类方法)

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

类名.类变量  Student.name

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

实例名.实例变量 s.id

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

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

static关键字的特点

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

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

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

当一个变量或者方法属于一个类,而不属于这个类的实例对象时,就可以使用static来修饰,

这样就可以使用类名.成员(变量/方法)的方式访问这个static变量/方法。

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

static方法重点注意事项

静态方法(类方法)中不能使用this关键字,this关键字代表的是当前对象的引用,

但是static关键字修饰的方法是属于这个类的,随着类的加载而存在,但当类进行加载时,

此时实例对象还没被创建出来,这时是无法使用this关键字的。

静态方法只能访问静态变量和静态成员方法。

 

所属

内存位置

出现时间

调用

静态变量

方法区的静态区

随类加载而加载

类名调用,对象名调用

实例变量

对象

堆内存

随对象创建而存在

对象名调用

 

声明位置

内存位置

生命周期

初始值

局部变量

方法内,形参上

栈内存

随方法调用而存在

必须先定义,赋值再使用

实例变量

类内,方法外

堆内存

随对象创建而存在

有默认初始值

main方法是静态的

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

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

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

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

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

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

如何使用API文档

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

以Scanner举例

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

看包

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

    要导入:

    import java.util.Scanner;

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

看类的结构

    成员变量    字段摘要   

    构造方法    构造方法摘要

    成员方法    方法摘要

学习构造方法   

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

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

看成员方法

    A:左边

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

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

    B:右边

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

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

代码块

代码块

在Java中,使用{}括起来的代码被称为代码块,根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块

局部代码块

在方法中出现,直接用{}括起来的部分,就是局部代码块

作用:限定变量生命周期,及早释放,提高内存利用率

构造代码块(也叫初始化块)

在类中,方法外出现;多个构造方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行,若多个构造代码块,则他们之间是顺序执行

作用:抽取构造方法中相同的部分,提高利用率

构造代码块和构造方法的关系:

构造代码块可以看成是构造方法的补充,构造代码块是一段固定的代码,它不接受任何参数,正是基于这个特点,如果多个构造方法中有一些代码完全相同,并且不需要接受任何参数的话,就可以把它们提取到构造代码块中。

将构造方法中相同的代码段提取到构造代码块的过程

静态代码块

在类中,方法外出现,加了static修饰的{},或者可以理解成,加了static修饰的构造代码块

作用:给类进行初始化(类变量的初始化),在加载的时候就执行,并且只执行一次

小结:代码块的作用

1.静态代码块是对类进行初始化的(主要是对类变量/静态变量进行初始化)

2.构造代码块和构造方法主要是对实例对象进行初始化的

3.局部代码块是用来规定变量的作用范围,提高内存使用效率,节省空间的

非静态方法可以访问的是:

1.静态/非静态成员变量

2.静态/非静态成员方法

总结,简单记:

    静态只能访问静态,非静态两种都能访问

对象初始化过程包含两个方面:

  构造代码块的执行 + 构造方法的执行

构造代码块:抽取构造方法中共同的语句,在构造方法执行前执行

静态代码块:在类加载时执行一次,用于对类(成员变量)进行初始化

原文地址:https://www.cnblogs.com/zhaoyongcx/p/6607043.html