java-static

static


1.static引入


/**
*姓名和年龄都是变化的,我们大家能接受 因为每个人不一样 	
*但是我们都是中国人
* 一样的国籍,每次创建对象,都要在堆内存开辟内存空间
* 浪费内存,怎么办呢?
*针对多个对象有共同的成员变量的值得时候
*Java提供了一个关键字static(静态的)
*/
public class Person {
	private String name;
	private int age;
	static String country;
	public Person() {
	}
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	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 void show() { 
		System.out.println("姓名:"+name+",年龄:"+age+",国籍:"+country);
	}
}
//被static修饰的成员变量	在内存中只有一份	大家可以共用
public class PersonTest {
	public static void main(String[] args) {
		Person person=new Person(); 
		person.setName("小玲");
		person.setAge(18);
		person.country="中国";
		person.show();
		Person person2=new Person();
		person2.setName("小玲好兄弟");
		person2.setAge(19);
		person2.show();
	}
}

2.static特点


/**
*static特点:
*A:可以修饰成员变量,还可以修饰成员方法
*B:随着类的加载而加载
*C:被类的所有对象所共享
*公共的	 举例	饮水机 
*D:可以通过类名调用
*其实也可以通过对象名调用 
*推荐使用类名调用
*/
class Student{
	//非静态变量
	int num=10;
	//静态变量
	static int num2=20;
	//非静态方法
	public void hello() {
		System.out.println("hello");
	}
	//静态方法
	public static void play() {
		System.out.println("paly");
	}
}


public class StudentTest {
	public static void main(String[] args) {
		Student student=new Student();
		System.out.println(student.num);//10
		System.out.println(student.num2);		
		//static修饰的成员静态的(共有的) 
		//直接通过类名.静态属性
		System.out.println(Student.num2);
		student.play();
		//static修饰的方法,可以通过类名直接调用
		Student.play();
	}
}

3.static内存图解


在这里插入图片描述

4.static关键字的注意事项


/**
*静态的是随着类的加载而加载,this是随着对象的创建而存在 
*静态比对象先存在
*静态的方法只能访问静态的成员变量和静态的成员方法
*非静态方法: 所有的变量和方法都可以访问
*简单记:静态只能访问静态
*/
class Teacher{
	//非静态变量
	public int num=10;
	//静态变量
	public static int num2=90;
	//非静态的方法
	public void show() {
		System.out.println(num);
		System.out.println(this.num);
		System.out.println(num2);
		function();
		method();
	}
	//静态方法
	public static void method() {
		//静态方法只能使用静态变量
		//System.out.println(num);	
		//静态变量
		System.out.println(num2);	
		//静态方法只能调用静态方法
		//function();
	}
	//非静态的方法
	public void function() {
	}
}
public class TeacherDemo {
	//静态方法
	public static void main(String[] args) {
		TeacherDemo teacherDemo=new TeacherDemo();
		teacherDemo.add();
		sum();
	}
	public void add() {
	}
	public static void sum() {
	}
}

5.main方法


public class HelloWorld {
/**
* public:公共的,访问权限最大。由于main jvm调用的,所以权限要足够大
* static:静态的	不需要创建对象 通过类名可以调用	方便jvm
* void: 方法返回值返回给调用者	而main由jvm调用	返回给jvm没有意义
* main:是一个常见的程序入口
* String[] args 形式参数	字符串数组
* 这个东西有什么用呢?
* 早期用来键盘录入,Scanner淘汰了
* @param args
*/
	public static void main(String[] args) {
		System.out.println("班长好!");
		for(int i=0;i<args.length;i++) {
			System.out.println(args[i]);
		}
	}
}

6.代码块


//代码块:在Java中,使用{}括起来的代码被称之为代码块 
//根据它的位置不同:可以分为
//1.局部代码块: 局部位置,方法中限定变量的生命周期 
//2.构造代码块:在类的成员位置,每次调用构造方法之前执行作用:可以把多个构造方法共同的代码放到一起,对象进行初始化 
//3.静态代码块: 类的成员位置,用{}括起来,加上static修饰
// 对类进行初始化
public class Code {
	static int x=10;
	{ 
		System.out.println("我是构造方法共同的代码");
	}
	static { 
		//只能访问静态变量
		System.out.println(x); 
		System.out.println("静态代码块");
	}
	public Code() { 
		System.out.println("无参构造");
	}
	public Code(String name) { 
		System.out.println("有参构造");
	}
	public static void main(String[] args) {
		int a=10;
		Code code = new Code("aa");
		//System.out.println(a);
	}
}

7.工具类


如果一个方法是大家都要用的方法,用静态方法
工具类:一般都是定义静态的方法
如果这个方法是对象独有的name get/set 非静态方法


7.1 数组的工具类


public class ArrayTool{
	/**
	*获取整型数组最大值
	* @param arr 传递一个整型数组 
	* @return 数组的最大值
	*/
	public static int getMax(int[] arr) {
		if(arr==null) {
			return -999;
		}
	int max=arr[0];
	for(int i=1;i<arr.length;i++) {
		if(arr[i]>max) {
			max=arr[i];
		}
	}
	return max;
}
/**
* 遍历整型数组
* @param arr 传递一个整型数组
*/
public static void print(int[] arr) {
	if(arr==null) {
		return;
	}
	for(int i=0;i<arr.length;i++) {
		System.out.print(arr[i]+" ");
	}
		System.out.println();
}
/**
* 对整型数组进行排序
* @param arr 传递一个整型数组
*/
public static void sort(int[] arr) {
	if(arr==null) {
		return;
	}
	for (int i = 0; i < arr.length - 1; i++) {
		for (int j = 0; j < arr.length - 1 - i; j++) {
			if (arr[j] > arr[j + 1]) {
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}
//获取指定元素的下标 
//返回值 	int下标
//参数	int[] arr,int value
//如果元素不存在返回-1
}

7.2 生成api


javadoc -d 文档的存放的目录	-author -version 需要生成文档的java文件
javadoc -d H:\code\J336\day11\src\com\gxa\demo03 -author -version ArrayTool.java

用别人的东西的时候 看api文档
sun javase jdk 写好了很多的类 api
servlet sun api
ssm api
在这里插入图片描述

7.3 使用sun公司的api


在这里插入图片描述
在这里插入图片描述
现在左侧搜索,找这个类看是否是我们需要的类,包含是否正常,看是否有构造器,有构造方法需要创建对象才能使用,非静态方法,如果没有构造,简单了,静态方法,直接调用
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值