JAVA 学习第六天

面向对象

静态 static

用法:是一个修饰符,用于修饰成员(成员变量,成员函数),当成员被静态修饰后,就多了一种调用方式,除了可以被对象调用外,还可以直接被类名调用。类名,静态成员。

eg:System.out.println(Person.country);


特有内容随着对象存储

country="cn" 在方法区,共享区,数据区。都可。


static特点

1,随着类的加载而加载

     也就是说,静态会随着类的消失而消失,说明它的生命周期最长。

2,优于的对象存在

      明确一点:静态是先存在,对象是后存在的

3,被所有对象共享

4,可以被类名所调用


实例变量和类变量的区别

1,存放位置

      类变量随着类的加载而存在于方法区中

      实例变量随着对象的建立而存在堆内存中

2,生命周期

      类变量生命周期最长,随着类的消失而消失

      实例变量生命周期随着对象的消失而消失


静态的使用注意事项

1,静态方法只能访问静成员

      非静态方法可以访问静态也可以访问非静态

2,静态方法中不可以定义this,super关键字

      因为静态优先于对象存在,所以静态方法不可以出现this

3,主函数是静态的


静态有利有弊

利:1,对对象的共享数据进行单独空间的存储,节省空间,没有必要每一个对象中都存储一份

        2,可以直接被类名调用

弊:1,生命周期过长

        2,访问出现局现性(静态只能访问静态)


主函数是一个特殊的函数,作为程序的入口,可以被jvm调用

主函数的定义:

public:代表着该数访问权限是最大的

static:代表主函数随着类的加载就已经存在了

void:主函数没有具体的返回值

main:不是关键字,但是是一个特殊的单词,可以被jvm识别

(String[] args):函数的参数,参数类型是一个数组,该数组中的元素是字符串,字符串类型的数组

主函数是固定的:jvm识别


jvm在调用主函数时,传入的是new String[0];


什么时候使用静态

要从两方面下手:

     因为静态修饰的内容有成员变量和函数

1,什么时候定义静态变量(类变量)呢?

  当对象中出现共享数据时,该数据被静态所修饰对象中的特有数据要定义成非静态,存在堆内存中

2,什么时候定义静态函数呢?

  当功能内部没有访问利用非静态数据(对象的物有数据)那么该功能定义成静态的


静态的应用(略)


制作java程序说明书 :1,先写注释块,2,应用javadoc程序


以下是本节所用到的代码

package welcome;

public class Person {
	public static int age = 0;//类变量
	private String name;//实例变量
	
	/*
	 * 获得一个唯一对象
	 * 分三步
	 */
	private static Person ss = new Person();
	private Person() {}
	public static Person getPerson()
	{
		return ss;
	}
	
	/*
	 * 构造代码块
	 * 作用:给对象初始化
	 * 对象一建立就运行,优先于构造函数执行
	 */
	{
		System.out.println("b");
	}
	
	static
	{
		System.out.println("a");
	}
	
	//构造Person
	//简单说:哪个对象在调用this所在的函数,this就代表哪个对象
	Person(String name) { 
		this.name = name;//不可用this(name)
	}
	Person(int age) { this.age = age; System.out.println("c"); }
	Person(String name, int age) { 
		//this.name = name;
		this(name);
		this.age = age; 
		/*
		 * this.age = age;
		 * this(name);
		 * 这样是不可以的,this在构造函数中必须是第一行
		 * 因为初始化要先执行
		 * 还有构造函数之间不许相互调用,会进入死循环
		 */
	}
	Person(int age, String name) { this.name = name; this.age = age; }
	
	//this的应用
	//两个人比较是不是同龄人
	//this的应用:当定义类中的功能时,该函数内部要用到该函数的对象时,用this来表示这个对象
	public boolean compare(Person p)
	{
		return this.age == p.age;
	}
	
	
	public void setAge(int num) { age = num; }
	public int getAge() { return age; }
	
	public void setName(String s) { name = s; }
	public String getName() { return name; }
	
	public static void cry()  { System.out.println("cry...."); }
	
	public void speak()
	{
		System.out.println("age="+age);
		System.out.println("name="+name);
	}
}

package welcome;

/*
 * @author xuanyimo
 */
public class ArrayTool {
	/*
	 * 获得一个函数的最大值
	 */
	public static int getMax(int[] arr)
	{
		int max = 0;
		for(int i = 1; i < arr.length; ++i)
		{
			if(arr[i] > arr[max])
				max = i;
		}
		return arr[max];
	}
	/*
	 * 冒泡排序
	 */
	public static void bubbleSort(int[] a)
	{
		for(int i = 0; i < a.length-1; ++i)
		{
			for(int j = 0; j < a.length-1-i; ++j)
			{
				if(a[j] > a[j+1])
					swap(a, j, j+1);
			}
		}
		return;
	}
	private static void swap(int[] a, int x, int y)
	{
		a[x] = a[x]^a[y];
		a[y] = a[x]^a[y];
		a[x] = a[x]^a[y];
		return;
	}
	/*
	 * 打印数组
	 */
	public static void show(int[] a)
	{
		for(int i = 0; i < a.length; ++i)
		{
			if(i != a.length-1)
				System.out.print(a[i]+", ");
			else
				System.out.println(a[i]);
		}
		return;
	}
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值