内存结构
栈
堆
方法区
栈
在方法中声明的局部变量保存在栈中,方法执行结束后栈中数据会被回收
堆
堆中保存的是对象的信息,使用new关键字创建的对象信息。堆中信息会被java的垃圾回收器回收。
方法区
方法区保存的是类的信息和静态变量
static关键字
使用static修饰变量
使用static修饰方法
使用static修饰代码块
使用static修饰变量
static修饰的变量为静态变量,类变量
访问方式:类名.变量名(推荐)
对象名.变量名
成员变量和全局变量的区别:
* a.在计算机内存中保存的位置不同:
* 成员变量保存在堆中,全局变量保存在方法区
* b.保存的份数不同
* 成员变量每new一次都开辟空间,保存多份。
* 全局变量只有1份
* c.访问方式不同
* 成员变量:对象名.属性,可以使用this关键字。
* 全局变量:类名.属性(推荐)
* 对象名.属性
* d.创建时间不同:
* 成员变量:只有使用new关键字创建对象时才会在堆中为其分配空间
* 全局变量:在类加载时在方法区中分配空间。
使用static修饰方法
2.使用static关键字可以修饰方法:静态方法或类方法
* 特点:静态方法中无法访问非静态的成员变量或方法;但非静态的方法中是可以访问静态的成员
* 访问方式:
* 类名.方法名(推荐)
* 对象名.方法名
使用static修饰代码块
使用static修饰代码块,静态代码块
* 语法:static{
* //代码
* }
* 执行过程:在类加载时执行静态代码块。静态代码块>普通代码块>构造方法。只会执行1次。
*
* 代码块:使用花括号包含的代码。使用比较少。不需要显式调用。
* 代码块的执行顺序:在创建实例时执行。代码块在构造方法之前执行,并且按照顺序执行,每创建一个对象就会执行1次。执行多次。
*
* 类中代码的执行顺序:
* 静态代码块>代码块>构造方法>静态方法或实例方法。
* 静态的方法中只能访问静态变量, 非静态的方法可以访问静态或非静态的变量
package和import关键字
package
import
静态导入
package
package关键字主要用于声明包。
java中的包:类似文件夹
*作用:1.分门别类进行存放数据,方便分类和管理。2.避免命名冲突。
*包的命名规范:所有字母都是小写,多级包名之间利用.进行分割
* 常见命名:顶级域名.一级域名.项目名.功能包名
* 顶级域名:com(company)公司,cn(china):中国大陆 ,hk:中国香港 ,tw:中国台湾,org:组织结构,edu:教育,net:网络服务机构...
* 一级域名:badu,bjsxt,zzsxt
* cn.zzsxt.oa.test
*java中常见的包: java.lang包之外的其他包下的类,使用时需要导包。
* java.lang包:java核心类库,String,System,Math... 该包下的类可以直接使用,无需导包。
* java.util包:工具类。 Arrays,Scanner...
* java.io包:i(input)/o(output)和java中流的输入和输出相关的类库。
* java.net包:网络编程相关的类库。
* java.sql包:与数据库操作相关的类库。
* java.text包:国际化或格式化输出相关的类库。
* java.awt包/javax.swing包:图形化界面相关的类库
*
*声明包:使用package关键字,必须放在该类的第一行。
*语法: package 包名; eg:cn.zzsxt.oop7;
import
导入包: import关键字,在使用非当前包下的其他包下的类时需要导包
*导包快捷键:ctrl+shift+o;
* 方式一: import 包名.*;将整个包导入。 eg: import cn.zzsxt.oop6.*;
* 方式二(推荐): import 包名.类名; eg:import cn.zzsxt.oop6.TestStatic;
*
*直接使用全类名进行访问: 包名.类名;
*cn.zzsxt.oop6.TestStatic testStatic = new cn.zzsxt.oop6.TestStatic();
*特殊场景:不同的包下存在相同的类名。
* import java.util.*;
import java.sql.*;
java.util.Date date = new java.util.Date();
静态导入
package cn.zzsxt.oop7;
//import static java.lang.Math.*;
import static java.lang.Math.PI;
import static java.lang.Math.random;
/**
* 静态导入:JDK1.5之后的新增特性。
* 语法: import static 包名.类名;
* 作用:如果使用静态导入某个类或类中属性和方法,可以直接使用该类中的静态属性或静态方法。
*/
public class StaticImport {
public static void main(String[] args) {
// System.out.println(Math.PI);
// double rand = Math.random();
// System.out.println(rand);
System.out.println(PI);//使用java.lang.Math类中的静态属性
System.out.println(random());//使用java.lang.Math中的静态方法
}
}