static 关键字

在类中,用static声明的成员变量为静态成员变量,也称为类变量。 类变量的生命周期和类相同,在整个应用程序执行期间都有效。它有如下特点:

  1. 为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化。

  2. 对于该类的所有对象来说,static成员变量只有一份。被该类的所有对象共享!!

类名.类属性/方法”来调用。(也可以通过对象引用或类名(不需要实例化)访问静态成员。)

  4. 在static方法中不可直接访问非static的成员。

核心要点:

 static修饰的成员变量和方法,从属于类。

            普通变量和方法从属于对象的。

static关键字的使用

public class User2 {
	int id;
	String name;
	String pwd;
	static String company="北京尚学堂";
	public User2(int id,String name) {
		this.id=id;
		this.name=name;
	}
	public void login() {
		printCompany();
		System.out.println(company);
		System.out.println("登录:"+name);
	}
	public static void printCompany() {
		//login();  //静态成员调用非静态成员,编译将会报错
		System.out.println(company);
	}
	public static void main(String[] args) {
		User2 u=new User2(101,"止小兮");
		u.login();
		User2.printCompany();
		User2.company="苍小凌有限公司";
		User2.printCompany();
		u.login();
	}
}

java data传参对象_静态初始化


静态初始化块

构造方法用于对象的初始化!静态初始化块,用于类的初始化操作!在静态初始化块中不能直接访问非static成员。

静态初始化块执行顺序:

先执行Object的静态初始化块,再向下执行子类的静态初始化块,直到我们的类的静态初始化块为止。

        2. 构造方法执行顺序和上面顺序一样!!

static初始化块

public class User3 {
	int id;
	String name;
	String pwd;
	static String company;
	static {
		System.out.println("执行类的初始化工作");
		company="苍小凌有限公司";
		printCompany();
	}
	public static void printCompany() {
		System.out.println(company);
	}
	public static void main(String[] args) {
		User3 u3=new User3();
	}
}

java data传参对象_静态初始化_02


  参数传值机制

Java中,方法中所有参数都是“值传递”,也就是“传递的是值的副本”。 也就是说,我们得到的是“原参数的复印件,而不是原件”。因此,复印件改变不会影响原件。

基本数据类型参数的传值

  传递的是值的副本。 副本改变不会影响原件。

引用类型参数的传值

引用类型指的是“对象的地址”。因此,副本和原参数都指向了同一个“地址”,改变“副本指向地址对象的值,也意味着原参数指向对象的值也发生了改变”。

多个变量指向同一个对象

public class User4 {
	int id;
	String name;
	String pwd;
	public User4(int id,String name) {
		this.id=id;
		this.name=name;
	}
	public void testParameterTransfer01(User4 u) {
		u.name="止小兮";
	}
	public void testParameterTransfer02(User4 u) {
		u=new User4(200,"苍小凌");
	}
	public static void main(String[] args) {
		User4 u1=new User4(100,"瑾修");
		u1.testParameterTransfer01(u1);  //传的是u1的地址
		System.out.println(u1.name);  //结果为:止小兮
		
		u1.testParameterTransfer02(u1);  
		System.out.println(u1.name);  //结果为:止小兮
	}
}

java data传参对象_System_03


 包

包机制是Java中管理类的重要手段。 开发中,我们会遇到大量同名的类,通过包我们很容易对解决类重名的问题,也可以实现对类的有效管理。 包对于类,相当于文件夹对于文件的作用。

package实现对类的管理,package的使用有两个要点:

类的第一句非注释性语句。

  2. 包名:域名倒着写即可,再加上模块名,便于内部管理类。

注:1. 写项目时都要加包,不要使用默认包。

      2. com.gao和com.gao.car,这两个包没有包含关系,是两个完全独立的包。只是逻辑上看起来后者是前者的一部分。

JDK中的主要包 

java data传参对象_System_04


导入类import

如果我们要使用其他包的类,需要使用import导入,从而可以在本类中直接通过类名来调用,否则就需要书写类的完整包名和类名。import后,便于编写代码,提高可维护性。

注:1. Java会默认导入java.lang包下所有的类,因此这些类我们可以直接使用。

如果导入两个同名的类,只能用包名+类名来显示调用相关类

导入同名类的处理

import java.sql.Date;
import java.util.*;//导入该包下所有的类。会降低编译速度,但不会降低运行速度
public class Test6 {
	public static void main(String [] args) {
		Date now;//这里指的是Java.sql.Date
		java.util.Date now2= new java.util.Date();
		System.out.println(now2);  //因为 java.util.Date 与 java.sql.Date 类同名,需要完整的路径
		Scanner input =new Scanner(System.in);  //java.util包的非同名类不需要完整的路径
	}
}

java data传参对象_静态初始化_05


 静态导入

静态导入(static import)是在JDK1.5新增加的功能,其作用是用于导入指定类的静态属性,这样我们可以直接使用静态属性。

静态导入的使用

package cn.sxt;
//以下两种静态导入的方式二选一即可
import static java.lang.Math.*;
import static java.lang.Math.PI;
public class Test2 {
	public static void main(String [] args) {
		System.out.println(PI);
		System.out.println(random());
	}
}

java data传参对象_System_06