由static关键字谈java基础

最近在想,自己算是中级程序员还是高级程序员,已经工作四年了,还没有对自己有一个明确的定位。毕竟程序员

的级别也不能单纯以工作时间作为唯一衡量标准。

在一个公司待一段时间,不管你的技术好与坏,总可以去适应公司的业务,框架,工作氛围。所有很多程序员,包

括我自己。能按时交付自己的工作成果,就觉得自己很了不起,飘飘然。IT技术更新很快,只有不断学习,才能进步。

而且,我发现自己工作四年,工作还算得心应手,但是偶尔碰到一些基础知识,还是束手无策。这让我反思,在追求新

技术,新思想的同时,是不是偶尔停下脚步,扎实一下基础知识呢?你们怎么看呢?请大家指教。

废话不多说,下面看一个java基础知识点:static关键字。首先来看static的特点:

(1)static变量也称作静态变量:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。

(2)被static关键字修饰的方法或者变量不需要依赖于对象进行访问,类被加载了,可以通过类名去进行访问。

(3)static关键字还有一个作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。

下面来看一个例子:

public class Student {
	private static int sid = 0;
	private String name;
	private int age;

	public Student(String name) {
		this.name = name;
		age = sid++;
	}

	public static int getSid() {
		return sid;
	}

	public static void setSid(int sid) {
		Student.sid = sid;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public static void main(String[] args) {
		Student.sid = 100;
		Student s1 = new Student("lyl");
		System.out.println(s1.getAge());
		System.out.println(s1.sid);
	}

}

下面是内存分析图:

输出结果:

100

101

知识点:

(1)static成员变量,存在于data seg内存数据段中,int基本数据类型,只占这一块内存。

(2)Student.sid = 100就是讲数据段中的sid的值修改为100

(3)new Studnet("lyl")的时候,会调用构造函数,字符串“lyl”初始化在数据段。构造方法的形参name执行数据段中的“lyl”

this.name就是Student的name属性,将形参name赋值给Student的name属性。等价于student的name属性也指向数据段的“lyl”

(4)age = sid++;这个操作的原则是:先赋值,再加加。即 age = 100  age加加就等于101

(5)执行完构造方法,形参name的栈空间自动消失。

时间: 2024-08-06 07:20:44

由static关键字谈java基础的相关文章

《java基础知识》Java static关键字以及Java静态变量和静态方法

static 修饰符能够与变量.方法一起使用,表示是“静态”的. 静态变量和静态方法能够通过类名来访问,不需要创建一个类的对象来访问该类的静态成员,所以static修饰的成员又称作类变量和类方法.静态变量与实例变量不同,实例变量总是通过对象来访问,因为它们的值在对象和对象之间有所不同. 请看下面的例子: public final class Demo { static int i = 10; int j; Demo() { this.j = 20; } public static void ma

9.Java static关键字以及Java静态变量和静态方法

static 修饰符能够与变量.方法一起使用,表示是“静态”的. 静态变量和静态方法能够通过类名来访问,不需要创建一个类的对象来访问该类的静态成员,所以static修饰的成员又称作类变量和类方法.静态变量与实例变量不同,实例变量总是通过对象来访问,因为它们的值在对象和对象之间有所不同. 请看下面的例子: public class Demo { static int i = 10; int j; Demo() { this.j = 20; } public static void main(Str

由volatile关键字谈Java内存模型

volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情.由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识,然后分析了volatile关键字的实现原理,最后给出了几个使用volatile关键字的场景 1. 内存模型的相关概念 当程序在运行过程中,会将运算需要的数据从主存复制一份到CPU的高速缓存当中,那么CPU进行计算时就可以直接从它的高速缓存读取数据和向其中写入数据,当运算结束之后,再

Java基础——成员变量、局部变量和静态变量的区别

之前在刚开始学习Java的时候,就谈了谈Java基础中的变量,虽然知道这货以后会经常用到,但没想到了基本语法这里,竟然有冒出来了成员变量.局部变量和静态变量.变来变去太容易让人搞晕了,挑拣出来梳理一下喽! 要想区分这哥仨,首先,我们得知道它们分别是什么.先从成员变量下刀. 成员变量 我们来研究一个事物: 属性:外在特征:例如人的身高,体重 行为:能够做什么:例如人有说话,打球等行为. 而在Java语言中,最基本的单位是类,类就是用来体现事物的. 用类class来描述事物也是如此: 属性:对应类中

java基础学习总结——static关键字

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! java基础学习总结——static关键字 一.static关键字 原来一个类里面的成员变量,每new一个对象,这个对象就有一份自己的成员变量,因为这些成员变量都不是静态成员变量.对于static成员变量来说,这个成员变量只有一份,而且这一份是这个类所有的对象共享. 1.1.静态成员变量与非静态成员变量的区别 以下面的例子为例说明 1 package cn.galc.test; 2 3 public class Cat { 4 5

java基础知识要点总结之几个重要关键字(关于static、this、final、)

you don't get anythin unless you create an object of that class with new, and at that point data storage is created and methods become available. But there are two situations in which this approach is not sufficient. One is if you want to have only o

一、Java基础之static关键字

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

Java基础-学习笔记(九)——static关键字

1.静态成员变量 程序中的类,只是在描述其对象的属性和成员,并没有产生实际对象,只有通过new关键字才能产生出对象,这时系统才会分配内存空间给对象,其方法才能供外部调用. 每生成一个对象,都会在内存中给它分配一个单独的空间,有时候我们希望无论产生多少对象,某些某些特定的数据在内存空间里只有一份,我们只需要在这种数据面前加上statice关键字即可.静态变量在某种程度下与其他语言中的全局变量比较类似.并且,我们可以不需要产生实例对象,直接使用类名来调用,如下代码所示 1 class Chinese

浅谈java中的static关键字

简述:在java中我们经常使用static关键字,该关键字就相当于是全局变量(静态变量或者是类变量). (1)当在类中的方法或者是变量前加上static时,那么这个方法或者变量只有'一份',在此后的类的各种对象中也是共用一份这个static所修饰的方法或者是变量(直接通过类名访问),相比于父类中其他的非static变量或者是方法,当其对象产生时,对象中会自己备份一份非static变量或者是方法(被所有的类实例共享).所以从这个角度看,static实际上可以节约内存空间,但是会一直占用内存空间,直