首页 > 代码库 > 大数据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基础第九天