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修饰,所以可以直接用:类.静态成员(成员变量,成员函数)
}
}