继续昨天这个问题
5、定义一个学生类,需要有姓名,年龄,考试成绩三个成员属性.属性(成员变量)需要私有并提供get, set方法,可以通过构造函数进行初始化。
在此,来说明来封装的优点,昨天已经说明过什么是封装了。简述封装就是隐藏对象的属性和实现细节,仅对外提供公共访问方式。
这时需要装三个成员私有化,私有化方式为
private String name;
private int age;
private double score;
注:私有是封装的一种,但封装不完全是通过私有来实现的。
封装原则:
将不需要对外提供的内容都隐藏起来。
把属性都隐藏,提供公共方法对其访问。
private(私有)关键字:
是一个权限修饰符;
用于修饰成员(成员变量和成员函数)
被私有化的成员只在本类中有效
注:其是成员修饰符,所以只能修饰成员,不能修饰类,内部类除外。
问题中要求将三个成员属性进行私有化,私有化的结果就是我们无法在其他类中通过创建Student类对象来重新对其赋值,这样就可以避免有人将违背自然规律的数据传入,如对象名称.age = -20;虽然对外提供了set方法也可以传入-20,但因为在set方法中,我们就可以通过判断来控制传入的数据了。
先写一个非常简单的get、set方法
public String getName()
{
Return name;
}
public void setName(String name)
{
this.name = name;
}
通过以上两个对外提供的访问方法,我们可以设置和获取name。setName中的this.其可以被看成是 对象名.
如构建一个Student类对象,Student s = new Student()
这个set中的this.name就等同于s.name
弄清楚以上问题,我们就可以写出这个问题的完整代码了。
public class Student
{
private String name;
private int age;
private double score;
public Student(String name,int age,float score)
{
this.name=name;
this.age=age;
this.score=score;
}
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 double getScore()
{
return score;
}
public void setScore(double score)
{
this.score = score;
}
}
static关键字
之前的代码中,所以main方法都标记为static,下面来讨论下这个修饰符的含义。
静态:static
用法:是一个修饰符,用于修饰成员(成员变量、成员函数)
当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用。格式—— 类名.静态成员
特点:1、随着类的加载而加载。即是说,静态会随着类的消失而消失,说明其生 命周期最长
2、优先于对象存在。静态是先存在的,对象是后存在的。
3、被所有对象所共享;
4、可以直接被 类名. 静态成员调用
实例变量与类变量的区别:
1、 存放位置:
1) 类变量随着类的加载而存在于方法区中;
2) 实例变量随着对象的建立而存在于堆内存中。
2、 生命周期:
1) 类变量生命周期最长,随着类的消失而消失;
2) 实例变更生命周期随着对象的消失而消失;
静态使用注意事项:
1、 静态方法只能使用静态成员,而非静态方法即可以访问静态也可以访问非静态;
2、 静态方法中不可以定义this,super关键字(super关键字会在之后的继承中说明)
3、 主函数是静态的。
以前面Student类为例进行说明,比如这些对象都是同一个年级或班级的,那就可以将年级和班级用修饰为静态。
静态代码块
格式:static{代码 }
特点:随着类的加载而执行,只执行一次且优先于主函数执行。用于给类进行初始化。它属于类,而不属于任何独立的对象。
根据视频里写出的一段代码,可以很清楚地解释静态代码块的运行。
class StaticCode
{
static
{
System.out.println("A");
}
}
class StaticCodeDemo
{
static
{
System.out.println("B");
}
public static void main(String[] args)
{
new StaticCode();
new StaticCode();
System.out.println("down");
}
static
{
System.out.println("b");
}
}
此段代码的结果显示为
E:\jdk6\jhw>java StaticCodeDemo
B
b
A
down
这就很明显地体现了静态代码块的特点(特点在前面已经写出),需要注意的是,静态代码块是随着类的加载而执行,从上面的代码中构造了两个StaticCode对象,但只打印了一次”A”就可以看出。
Main函数
主函数:是一个特殊的函数。作为程序的入口,可以被jvm调用。
主函数的定义:
public:代表着该函数访问权限是最大的。
static:代理主函数随着类的加载就已经存在了。
void:主函数没有具体的返回值。
main:不是关键字,但是一个特殊的单词,可以被jvm识别.
(String[] args):函数的参数,参数类型是一个数组,该数组中的元素是字符串。字符串类型的数组。
主函数是固定格式的,被jvm识别。