JAVA学习第九课(关键字二static)

关键字二、 static(静态)

特点:

static 用于修饰成员(成员函数和成员函数)

static的存在,优先于对象存在,随着类的加载而加载

static所修饰的成员,被所有对象共享

static可以直接被类名调用,格式:System.out.println(Person.country);:类名.静态成员

使用细节

静态方法只能访问静态成员,即static修饰的成员,static int data;

静态方法不可以写this、super:this代表着当前调用该方法的对象。

主函数(main)是静态的 : public static void main(String[] args)

import java.util.Scanner;

import javax.naming.ldap.SortControl;
class Person
{
	String name;//成员变量/实例变量
    static String country = "CN";//静态变量/类变量
	public void show ()
	{
		System.out.print(country+" : "+name);
	}
}
public class Main
{
	public static void main (String[] args)
	{
		Person BLF = new Person();
		Scanner cin =  new Scanner(System.in);
		//BLF.name = cin.nextLine();
		BLF.name = "BLF2";
		BLF.show();
		System.out.println(Person.country);//static 共享,可以直接用类名输出
		                                   //但是不可滥用,有些数据毕竟是特有的,不是共享的
  					   	   //比如中国人 ,国籍是共享的,但是姓名是特有的

		cin.close();
	}

}

成员变量和静态变量的区别:

1.两者生命周期不同。静态的生命周期长

成员变量随着对象的创建而存在,随着对象的释放而释放,即成员变量的存在取决于对象的存在与否

静态变量随着类的加载而加载,随着类的消失而消失

2.调用方式不同

成员变量只能被对象调用

静态变量可以被对象调用,可以用类名调用,所以有static修饰的成员,最好用类名调用,清晰,且不用创建对象

3.

成员变量称为实例变量

静态变量称为类变量

4.两者存储位置不同

成员变量存储在堆内存的对象中,所以也叫对象的特有数据(堆里不肯能放变量,只能放实体,实体里可以有变量)

静态变量的数据存储在方法区(数据区/共享区)中的静态区,所以也叫对象的共享数据

static在使用过程中的细节:

1.访问有局限性:static修饰的方法只能访问static修饰的成员

错误代码:

import java.util.Scanner;

import javax.naming.ldap.SortControl;
class Person
{
	String name;
    static String country = "CN";
	public static void show ()
	{
		System.out.print(country+" : "+name);//因为有没有static修饰的成员name
		//System.out.print(country+");//所以不能有name
	}
}
public class Main
{
	static int data = 9;
	public static void main (String[] args)
	{
		Person BLF = new Person();
		Scanner cin =  new Scanner(System.in);
		//BLF.name = cin.nextLine();
		BLF.name = "hello";
		BLF.show();

		cin.close();
	}
}

所以,static修饰的成员可以不用对象,直接用类名调用,因为对象还不存在,所以name自然也就不存在

(非静态既可以访问静态,又可以访问非静态)

2.主函数是静态的。

public class Main
{
	static int data = 9;//静态修饰成员变量
	public static void main (String[] args)
	{
	       show();
	}
	public void show() //此处如果想要调用,必须用静态修饰方法,data不加静态,叫做特有数据
        //public static void show()//此方式可以访问static修饰的data
	{
		System.out.println(data);
	}
}

想访问特有数据data,所以想要调用一个show方法,可以用对象调用

public class Main
{
	int data = 9;//静态修饰成员变量
	public static void main (String[] args)
	{
		Main BLF = new Main();
	       BLF.show();
	}
	public void show()
	{
		System.out.println(data);
		//也可以System.out.println(Main.data);//Main.  可以省略
	}
}

故,主函数用来指挥其他对象工作,把代码封装到函数中,再把函数封装到每个类中,main只需要创建那么对象,指挥那么对象工作即可

未完。。。

时间: 2024-10-26 13:19:40

JAVA学习第九课(关键字二static)的相关文章

JAVA学习第九课(关键字一)

关键字: this 关键字 this 使用一: 直接以代码解释: class Man { private int age; private String name; Man() { name= null;age = 0; } Man(String n)//正常直接打印"BLF,0",但是把n改为name呢,就会打印null,0 { name = n; }//改成name虽然增加了阅读性,但是参数名进栈时,栈区已经有了一个局部变量名name, 那么name的赋值,只会把自己赋值给自己.如

原 Java学习之Xml系列二:xml按条件查询、xml递归遍历所有元素和属性

xml中加入了几条,为了方便查询时作为示例. 话不多说见代码注释: DTD文件:SwordTypeDefinition.dtd <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT SwordLibrary (Sword*)> <!ELEMENT Sword (SwordName,Price,Attack)> <!ELEMENT SwordName (#PCDATA)> &l

FPGA入门学习第一课:二分频器

分频器还是比较简单的,一般的思路是:每数几个时钟就输出一个时钟.最简单的当数二分频器了,每当时钟上升沿(或下降沿)就把输出翻转一下.这样就刚好实现了二分频器了. 网上也搜到了最简实现”二分频最简单了,一句话就可以了:               always @ (negedge clk)        clk_2<=~clk_2;“ 但仿真时却发现无法输出 分析是因为输出信号的初始状态不确定造成的,于是加了一句初始化,就可以正常分频了 但观察他们生成的逻辑结构图是一样的 完整代码如下: mod

Java学习之finally关键字总结

Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例.final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的. final关键字的含义? final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如

Java学习之路(二)--Thinking in Java

针对昨天Java学习之路(一)--Thinking in Java中的类的静态方法不能访问创建非静态类,给出了将内部类修改成为static静态类,操作方便简单.现在给出第二种不需要添加删除的另一种极为高效的方式.可以将内部类从你所创建的类中复制粘贴到类外,作为一个外部类,在static主方法中就可以创建类的引用了. 源代码如下: ? class test{ int s; char c; } public class test1 { public static class test{ int s;

JAVA学习第五十二课 — IO流(六)File对象

File类 用来给文件或者文件夹封装成对象 方便对文件与文件夹的属性信息进行操作 File对象可以作为参数传递给流的构造函数 一.构造函数和分隔符 public static void FileDemo() {//构造函数演示 //可以将一个已存在或不存在的文件或目录封装成File对象 File file = new File("d:\\a.txt"); File file2 = new File("d:","a.txt"); File file

JAVA学习第四十二课 — 泛型(二)—泛型接口&amp;&amp;通配符应用

一.泛型接口 interface Inter<T>{ public void show(T t); } class InterImple implements Inter<String>{//知道是字符串类型 public void show(String str){ System.out.println("show "+str); } } class InterImple_2<Q> implements Inter<Q>{//不知道是什

JAVA学习第六十二课 — TCP协议练习

通过练习掌握TCP在进行传输过程中的问题 练习1:创建一个英文大写转换服务器 客户端输入字母数据,发送给服务端,服务端收到后显示到控制台,并将该数据转成大写返回客户端,知道客户端输入over,转换结束 public class Main { public static void main(String[] args) throws IOException{ Text_Transform_Client(); Text_Transform_Server(); } public static void

Java学习日记-5 关键字static和final 以及接口

乱入:表达式中的自动类型转换 char,short,byte都升级为int类型进行运算,结果为int,但其原变量类型并不改变. 所以,byte b = 10;  b = b*b; 编译时会报错.但是写成 b *=b; 就没问题了. ——————————————华丽的分割线———————————————————————— //static与final一.static 1.位于变量前 变量为静态变量,可通过类名调用 2.位于方法前 方法为静态方法,可通过类名调用 存储在静态区,可以被所有对象直接访问