3.1 背景知识
3.1.1 JVM
JVM(Java Virtual Machine) 是一种规范。就是一个虚拟的用于执行bytecodes字节码的计算机。
3.1.2 字符集
3.1.3 Java内存划分
- 栈(Stack):存放的都是方法中的局部变量,方法的运行一定要在栈当中。
局部变量:方法的参数或方法内部的变量
作用域:一旦超出作用域,立刻从栈内存中消失
- 堆(Heap):凡是new出来的东西,都在堆中
堆内存里面的东西都有一个地址值:16进制
堆内存里面的数据,都有默认值,规则:整数 0 浮点数 0.0 字符 ‘\u0000’ 布尔 false 引用类型 null
- 方法区(Method Area):存储.class相关信息,包含方法的信息。
- 本地方法栈(Native Method Stack):与操作系统相关
- 寄存器(pc Register):与CPU相关
3.2 语法
3.2.1 成员变量与局部变量
局部变量和成员变量的区别
- 定义的位置不一样:局部变量方法的内部 成员变量在类中
- 作用域不同:局部变量只有方法当中才能使用 成员变量在类中可用
- 默认值不同:局部变量无默认值,如果要想使用必须手动进行赋值 成员变量默认会有起始值 不赋值的局部变量不可用
- 内存位置不同 局部变量位于栈中 成员变量位于堆内存中
- 生命周期不同 局部变量随着方法进栈而诞生,随着方法出栈而消失 成员变量随着对象创建而诞生,随着对象销毁而回收
3.2.2 面向对象三大特征
封装、继承、多态
封装在Java中的体现:封装就是将一些细节信息隐藏起来,对于外界不可见。
1.方法就是一种封装
2.关键字private也是一种方法:
在获取boolean类型的成员变量值的时候不是getMale,而是IsMale ```java package com.outlook.szdxzhy;
public class Person { private boolean male;
public void show(){
System.out.println("我叫:"+name+",年龄是:"+age);
}
public boolean isMale(){
return male;
}
}
<a name="bkJp5"></a>
## 3.2.3 this关键字
**当类的成员变量和方法的局部变量重名时,遵循就近原则。需要用this关键字来区分。**<br />**通过谁调用的方法,谁就是this。地址是一样的。**
```java
p.name="Albert";
p.sayHello("王健林"); p调用p就是this
System.out.println(p);
public void sayHello(String name){
System.out.println(name +",你好,我是"+this.name);
System.out.println(this);
}
王健林,你好,我是Albert
com.outlook.szdxzhy.Person@3941a79c
com.outlook.szdxzhy.Person@3941a79c
3.2.4 构造方法
1.构造方法的名称必须和所在类名称完全一样,就连大小写也要一样
2.构造方法不要写返回值类型,连void都不需要写
3.2.5 标准类 Java Bean
标准类要拥有下面四个组成部分:
1.所有成员变量都要使用private关键字修饰:Code-Generate(ALT+INSERT)
2.为所有成员编写get/set方法
3.编写一个无
3.2.6 API
Application Programming Interface
JDK API 1.6.0中文版官方翻译
包名
构造方法
方法摘要
3.2.7 Scanner
引用类型的一般使用步骤:
- 导包 import 包路径.类名称
如果需要使用的目标类和当前类位于同一包下,则可以省略导包语句不写
只有java.lang包下的内容不需要导包,其他的都需要import
- 创建
- 使用
Scanner类可实现键盘输入数据到程序中
package com.rigol.albert;
import java.util.Scanner;
/*
Scanner类可实现键盘输入数据到程序中
获取int数字 int num = sc.nextInt();
获取字符串 String str = sc.next();
*/
public class ScannerHelper {
public static void main(String[] args) {
//System.in代表从键盘进行输入
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
System.out.println("当前输入的数字是:"+num);
String str = sc.next();
System.out.println("当前输入的字符串是:"+str);
}
}
3.2.8 匿名对象
new 类名称();
package com.outlook.szdxzhy;
public class 匿名对象 {
public static void main(String[] args) {
Person p = new Person();
/*
匿名对象只能使用唯一一次,下次再用不得不再创建一个新对象。
使用建议:如果确定有一个对象只需要使用唯一的一次,就可以用匿名对象。
*/
new Person().name = "高圆圆";
}
}
package com.outlook.szdxzhy;
import java.util.Scanner;
public class Demo06_Scanner {
public static void main(String[] args) {
//匿名对象方式,只使用一次
System.out.println(new Scanner(System.in).nextInt());
}
}
3.2.9 Random
左闭右开区间
Random r = new Random();
int num = r.nextInt(3); [0-3)
3.2.10 ArrayList
package com.rigol.albert;
import java.util.ArrayList;
public class Demo02_ArrayList {
public static void main(String[] args) {
ArrayList<Student> listPerson = new ArrayList<Student>();
Student p = new Student("Albert",18);
listPerson.add(p);
System.out.println(listPerson.get(0).name);//放进去是一个学生,拿出来也是一个学生
ArrayList<String> listStudent = new ArrayList<>();
listStudent.add("Albert");
listStudent.add("Jack");
System.out.println(listStudent);
}
}