学习笔记 Java_封装 2014.7.11

1、封装(private)

代码:PersonDemo.java

class Person
{
	int age;
	void speak()
	{
		System.out.println("age=" + age);
	}
}

class PersonDemo 
{
	public static void main(String[] args)
	{
		Person p = new Person();
		p.age = 20;
		p.speak();  //得age = 20
//		System.out.println(p.speak());  //为什么不可以这么写?
	}
}
class Person
{
	private int age;  //private:私有,权限修饰符:用于修饰类中的成员(成员变量,成员函数)。
	                  //私有只在本类(Person类)中有效。
	void speak()
	{
		System.out.println("age=" + age);
	}
}

class PersonDemo 
{
	public static void main(String[] args)
	{
		Person p = new Person();
//		p.age = -20;
		p.speak();  //得不到age了,因为age的权限设为private了
	}
<strong>}</strong>
class Person
{
	private int age;  //将age私有化以后,类以外即使建立了对象也不能直接访问。
					  //但是人应该有年龄,就需要在Person类中提供对应访问age的方式。
					  //注意:私有仅仅是封装的一种表现形式
	
	//之所以对外提供访问方式,就因为可以在访问方式中加入逻辑判断语句。
	//对访问的数据进行操作。提高代码健壮性。	
	//方法通常都是set、get。如果一个类里面有两个功能setXXX、getXXX,代表这个类里面一定有一个私有的属性就做XXX
	public void setAge(int a)  //set返回值void,不用返回
	{
		if(a > 0 && a < 150)
		{
			age = a;
			System.out.println("age=" + a);
		}
		else
			System.out.println("输入年龄不符合常理!");
	}

	public int getAge()  //get不用参数,返回值跟它获取变量一致 
	{
		return age;
	}
}

class PersonDemo 
{
	public static void main(String[] args)
	{
		Person p = new Person();
		p.setAge(10);
	}
}

成员变量(作用于整个类中)有默认值,不赋值是能参与运算的,因为它有默认初始值,因为它在堆内存中。因为对象的存在,才在内存中存在。

局部变量(作用于函数中,或者语句中)不初始化是不能参与运算的,因为它在栈内存中,必须要初始化化值才能参与运算。

 

2、构造代码块:给所有对象进行初始化(对象共性) 使用:单独一个代码区块 { }    (虽然开发见不着)

      构造函数:给对应的对象初始化

 

3、static关键字

      用法:是一个修饰符,用于修饰成员(成员变量,成员函数),不能修饰局部。

     当成员被静态修饰后,就多了一种调用方式,除了可以被对象调用外,还可以直接被类名调用。类名.静态成员。

     特点:

     1、随着类的加载而加载;

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

     2、优先于对象存在;

          静态是先存在的。对象是后存在的。

     3、被所有对象所共享;

     4、可以直接被类名所调用。

     实例变量和类变量的区别:

     1、存放位置:

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

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

      2、生命周期:

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

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

       静态使用注意事项:

       1、静态方法只能访问静态成员。

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

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

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

       3、主函数是静态的。

       静态有利有弊:

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

              可以直接被类名调用。

       弊:生命周期过长。

              访问出现局限性。(静态虽好,只能访问静态。)

代码:MyDate.java

public class MyDate  //共有的类,与源程序文件同名
{
	private int year;
	private static int thisYear;  //当前年份,私有静态成员变量

	static  //静态成员变量初始化
	{
		thisYear = 2014;
	}

	public static int getThisYear()  //获得今年年份,静态方法
	{
		return thisYear;  //访问静态成员变量
	}

	public static boolean isLeapYear(int year)  //静态方法
	{
		return year % 400 == 0 || year % 100 != 0 && year % 4 == 0;
	}
}

class MyDate_ex
{
	public static void main(String[] args)
	{
		System.out.println("今年是" + MyDate.getThisYear() + "年, 闰年?" + MyDate.isLeapYear(MyDate.getThisYear()));
		//因为getThisYear(),isLeapYear()前面有static修饰,所以可以直接用:类.静态成员(成员变量,成员函数)
	}
}


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值