java基础之static(静态)

静态的属性、方法等属于类而不是对象。

静态的方法能够由类直接调用,不须要将类实例化。

本篇主要说明:1、态的代码、成员变量要比构造方法先运行。

2、

子类的构造方法会默认去调用父类的不带參数的构造方法,假设父类不提供不带參数的构造方法,则子类的构造方法要显示使用super(param),去调用父类的带參数的构造方法

下面代码,能够将凝视掉的内容放开,或增改參数类型、參数定义的位置等,然后运行main看看打印结果,就会更加明确:静态的代码(块)、成员变量要比构造方法先运行。

/**
 * author Ding Chengyun
 * 2014-2-23
 */
package test;

/**
 * @author Ding Chengyun
 * 2014-2-23
 */
public class StaticTest {
	private static StaticTest instance = new StaticTest();
	public static int i;
	public static int j = 0;
	private StaticTest() {
//		System.out.println("static constract");
		i++;
		j++;
	}

//	static {
//		System.out.println("static block");
//		i = 2;
//		j = 3;
//	}
	public static StaticTest getInstance() {
		return instance;
	}
	public static void main(String[] args) {

		StaticTest st = StaticTest.getInstance();
		System.out.println(st.i + "," + st.j);

		//问:输出结果是什么
		//答:输出结果是1,0.由于java静态成员变量的载入顺序是从类的開始从上到下顺序载入的。
		//从main方法開始,然后运行到第一行代码private static StaticTest instance = new StaticTest();
		//此时须要调用构造方法,在构造方法中给两个变量分别++。对于int类型的变量,默认初始化值都为0,因此,构造方法运行完成。i,j的值都为1
		//继续运行到第二行代码public static int i;由于构造方法已经赋值过了。此处不再赋值操作。i=1
		//运行第三行代码public static int j = 0;此处显示的给j赋值为0。因此覆盖了构造方法中的赋值1。此时,j=0.
		//因此运行完成main方法,结果输出 1,0

		//同理,假设将代码的书写顺序进行变化将public static int i;		public static int j = 0;放到
		//private static StaticTest instance = new StaticTest();之前。那么运行结果将会发生变化,
		//以此类推,结果输出将是1,1

		//假设添加一段静态代码块,如上被凝视的代码,运行结果类推,应为2,3,由于静态代码最后运行的是静态代码块。
		//可是假设将静态代码块放到最上面、两句变量定义之后等不同位置,运行结果都会发生变化。
		//然则,基本原则是不变的:静态成员变量运行顺序是从类的開始从上往下运行。
	}

}

/**
 * author Ding Chengyun
 * 2014-2-23
 */
package test;

/**
 * @author Ding Chengyun
 * 2014-2-23
 */
public class OrderStaticTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new Childs();//问题:输出什么?
//		parent block
//		child block 2
//		child block 1
//		parent constract
//		child constract

	}

}

class Parents {
	static String name = "hello";
	public Parents() {
		System.out.println("parent constract");
	}
	static {
		System.out.println("parent block");
	}

}

class Childs extends Parents{
	static String childName = "world";
	public Childs() {
		System.out.println("child constract");
	}
	static {
		System.out.println("child block 2");
	}
	static {
		System.out.println("child block 1");
	}

}

				
时间: 2024-10-12 08:19:26

java基础之static(静态)的相关文章

Java 基础之 static 静态

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享. 只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们.因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象. 用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类

黑马程序员——Java基础---有关static(静态)的知识

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流!                                         面向对象—有关static(静态)的知识 可以使用static关键字声明与类而是不与实例相关的变量,方法或代码块. 静态变量: 在编写一个类的时候,实际上就是在描述其对象的行

Java基础之static关键字的用法

Java中的static关键字主要用于内存管理.我们可以应用static关键字在变量.方法.块和嵌套类中. static关键字属于类,而不是类的实例.        静态(static)可以是: 变量(也称为类变量) 方法(也称为类方法) 代码块 嵌套类         修饰变量 被static修饰的变量称作静态变量或类变量:没有被static修饰的变量,称为实例变量.静态变量在内存中只有一个拷贝(节省内存),JVM只为静态变量分配一次内存,在类加载的过程中完成静态变量的内存分配(存储在"方法区

JAVA基础之Static

static关键字 static:静态成员,类成员 public static int price;//静态属性或者叫类属性 public static String outName(){//静态方法和类方法 } 特点 类产生的对象共享同一个内存空间 类加载时产生,销毁时释放,声明周期长 只能加在属性或者方法名称的前面 在成员方法(非静态方法)中可以调用静态方法 在静态方法中不可以调用非静态成员,只能调用静态成员 代码实现 类 package com.imooc.animal; public c

一、Java基础之static关键字

static关键字可以用来修饰变量.方法.代码块以及内部类. 静态资源从JVM的类加载机制角度来说,它是在类首次被初始化时加载到方法区,而非静态资源需要类new出对象的时候被加载到堆栈里.如:使用Class.forName("xxx")方法初始化某个类来加载静态资源,同样的,在new出对象前会确保该类被初始化了. static变量: 静态变量被所有对象共享,在内存中只有一份.故,被任意对象修改该静态变量后,会影响到所有对象. (PS:在多线程中需要多注意共享资源的使用.) static

java基础-Map的静态初始化以及Map的遍历等.....................

1.map的静态初始化,以及map遍历的几种方法: package com.cy.test; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; public class Test { public static void main(String[] args) { Map<String, Integer> map = new HashMap

【Java基础】static关键字相关

static关键字特点: 随着类的加载而加载. 优先于对象存在. 被所有对象共享 可以直接被类名调用. 使用注意: 静态方法只能访问静态成员. 但非静态成员可以访问静态成员. 静态方法中不能使用this,super关键字. 主方法(main)是静态的. 看了上面是不是想睡觉了,单纯的概念是挺烦人的,那下面让我们在实际代码中来加深对他们的认知. 方法的调用可以分为两种: 对象调用: 对象.方法(实参) 类调用: 这个方法所在类的名字.方法(实参)//前提是这个方法必须被static修饰. 没有使用

Java基础(十)--static关键字

static关键字通常应用在字段.方法.静态块,还有冷门一点的内容:静态内部类.静态导入 static字段: static字段也就是静态变量,是属于类的,被所有的对象所共享,只有当类初次加载的时候保存到内存中,在内存中只保存一份 实例变量是属于对象的,在创建对象的时候进行初始化,每个对象的实例变量是互斥的,不会相互影响 PS:static是不允许用来修饰局部变量,无论是方法.静态块.代码块 static方法: public class A{ private static int i = 1; p

Java基础之static关键字

static方法就是没有this的方法.在static方法内部不能调用非静态方法,反过来是可以的.而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法.这实际上正是static方法的主要用途.static可以用来修饰类的成员方法.类的成员变量,另外可以编写static代码块来优化程序性能.但是在Java中切记:static是不允许用来修饰局部变量. static方法 static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有th