您的位置:首页 > 编程语言 > Java开发

学习笔记 Java_封装 2014.7.11

2014-07-11 12:08 357 查看
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修饰,所以可以直接用:类.静态成员(成员变量,成员函数)
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: