JDK: Java的依赖包
JRE: Java 运行环境
JVM: Java 虚拟机
懒人·必备: Ctrl + Alt + L 格式化代码
Ctrl + Alt + T 快速生成常用流程控制语句
右键 + Generate (Alt+ Insert) 快速生成构造器存取器等代码结构
1.常量
== 判断的是地址,并非数值大小
判断数值或内容使用 equals()方法
public class Test{
Integer i1=new Integer(1);
Integer i2=new Integer(1);
//i1,i2分别位于堆中不同的内存空间
System.out.println(i1==i2);//输出false
Integer i3=1;
Integer i4=1;
//i3,i4指向常量池中同一个内存空间
System.out.println(i3==i4);//输出true
//很显然,i1,i3位于不同的内存空间
System.out.println(i1==i3);//输出false
}
常量池
String s1 = "Hello";
String s2 = "Hello";
String s3 = "Hel" + "lo";
String s4 = "Hel" + new String("lo");
String s5 = new String("Hello");
String s6 = s5.intern();
String s7 = "H";
String s8 = "ello";
String s9 = s7 + s8;
System.out.println(s1 == s2); // true
//s1和 s2都是字面量,存放于同一个常量池
System.out.println(s1 == s3); // true
//s3虽然是动态拼接出来的字符串,但是所有参与拼接的部分都是已知的字面量,在编译期间,这种
//拼接会被优化,编译器直接帮你拼好,因此String s3 = "Hel" + "lo";在class文件中被优化成
//String s3 = "Hello";
System.out.println(s1 == s4); // false
//s4 第二元素为堆内地址,拼接后并不在常量池
System.out.println(s1 == s9); // false
//s9由两个常量计算而来,编译器,不可能当解释器用,所以编译时s9为一个未知新地址。
System.out.println(s4 == s5); // false
//同上
System.out.println(s1 == s6); // true
//intern()方法将目标添加至常量池,故和s1相等
String s = new String("abc")创建了几个对象?
两个。
abc本身是常量池中一个对象,存放于栈。new 创建新的对象并复制常量池对象存放于堆。
String name=new String("java"+"hello");
四个。
1."java"创建了一个对象,存于String常量池
2."hello"创建了一个对象,存于String常量池
3."java"+"hello",创建了一个对象,存于常量池(基于字符串的+操作,如带有引用的,将在堆中创建对象,否则值会存于字符常量池)
4.new将会创建一个对象,将字符常量池中的"javahello"复制到堆中
String str1="abc";
String str2="def";
String str3=str1+str2;
System.out.println(str3=="abcdef");
//结果是false
运行过程 : str1和str2为栈的常量池对象
编译器编译时 + 运算符将str1 和 str2 在堆中新建并相加,在堆中建立一个新的地址存放结果,并复制地址给栈内的str3
所以"abcdef"为常量池中的对象 str3为 堆内实际运行结果的地址
"abc"+"def" 字面量相加, 编译器进行优化 ,得到 "abcdef"
String str3=str1+str2; 将字符串池中的对象在堆内新建并相加得到新的对象,并返回新地址给str3。
常量的声明方法
final 数据类型 常量名称 = 值;
final 数据类型 常量名称1 = 值1, 常量名称2 = 值2,……常量名称n = 值n;
final double PI = 3.14;
final char MALE=‘M’,FEMALE=‘F’;
也可以先声明后赋值,仅可赋值一次
final double PI;
PI = 3.1415926
变量
Java局部变量
- 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;
- 访问修饰符不能用于局部变量;
- 局部变量只在声明它的方法、构造方法或者语句块中可见;
- 局部变量是在栈上分配的。
- 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
package com.runoob.test;
public class Test{
public void pupAge(){
int age = 0; //在栈内进行分配,且作用域仅在pupAge
age = age + 7;
System.out.println("小狗的年龄是: " + age);
}
public static void main(String args[]){
Test test = new Test();
test.pupAge();
}
}
Java实例变量
- 实例变量声明在一个类中,但在方法、构造方法和语句块之外;
- 实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
- 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;
import java.io.*;
public class Employee{
// 这个成员变量对子类可见
public String name;
// 私有变量,仅在该类可见
private double salary;
//在构造器中对name赋值
public Employee (String empName){
name = empName;
}
//设定salary的值
public void setSalary(double empSal){
salary = empSal;
}
// 打印信息
public void printEmp(){
System.out.println("名字 : " + name );
System.out.println("薪水 : " + salary);
}
public static void main(String args[]){
Employee empOne = new Employee("RUNOOB");
empOne.setSalary(1000);
empOne.printEmp();
}
}
Java类变量(静态变量)
- 类变量也称为静态变量,在类中以static关键字声明,但必须在方法构造方法和语句块之外。
- 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
- 静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变。
- 静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量。
三个变量的区别
成员变量和静态变量的区别
1、两个变量的生命周期不同
成员变量随着对象的创建而存在,随着对象被回收而释放。
静态变量随着类的加载而存在,随着类的消失而消失。
2、调用方式不同
成员变量只能被对象调用。
静态变量可以被对象调用,还可以被类名调用。
3、别名不同
成员变量也称为实例变量。
静态变量也称为类变量。
4、数据存储位置不同
成员变量存储在堆内存的对象中,所以也叫对象的特有数据。
静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。
总结
java变量包含静态变量(static Variable)、成员变量()和局部(local Variable )变量三种。其实,也可以说两种,静态变量和成员变量都是全局变量(Global Variable),只是成员变量是动态的,还有就是,静态变量的生存周期是由类决定的,是在加载类文件时初始化的;而成员变量则是在类中没有用static修饰的变量,它的生存周期是由对象决定的,是在new 一个对象时初始化的
数据类型
插一个数组的定义吧
int [] a = {1,2,3,4,5};
获取: a[0]
String [] a = {"a","b","c"};
int [] a = new int [3];
a[0]=1;
a[1]=2;
...
基本类型 | 对象类型 | 说明 | 位数 | 基本类型 |
boolean | Boolean | 布尔型 | 1 | 0,1 |
byte | Byte | 字节 | 8 | -128 - 127 |
short | Short | 短整型 | 16 | -32768 - 32767 |
char | Char | 字符型 | 16 | ‘ \u0000 - u\ffff ’ |
int | Integer | 整型 | 32 | -2147483648-2147483647 |
float | Float | 浮点型 | 32 | -3.40292347E+38-3.40292347E+38 |
long | Long | 长整型 | 64 | 9233372036854477808-9223372036854775807 |
double | Double | 双精度 | 64 | 1.79769313486231570E+308-1.79769313486231570E+308 |