类与对象
相关知识点
类是Java中最重要的数据类型,类的目的是抽象出一类事物的共有属性和行为,即抽终出数据以及在数据工所进行的操作。类的类体由两部分组成
:变量的声明
和方法的定义
,其中的构造方法(方法名与类名相同,无类型)用于创建对象
,其他的方法供该类创建的对象调用。
抽象(abstract)的目的是产生类,而类的目的是创建具有属性和行为的对象。
使用new运算符和类的构造方法为声明的对象分配变量,即创建对象。对象不仅可以操作自己的变量改变状态,而且能调用类中的方法产生一定的行为。通过使用运算符“.”
,对象可以实现对自己的变量访问和方法的调用。
Java程序以类为“基本单位”,即一个Java程序就是由若干个类所构成。一个Java程序可以将它使用的各个类分别存放在不同的源文件中,也可以将它使用的类存放在一个源文件中。
因此,要学习Java编程就必须学会怎样去写类,即怎样用Java的语法去描述一类事物共有的属性和行为。
创建一个类的例子
class Tank { //一个坦克类
double speed; //坦克的速度
int bullet; //炮弹的数量
Tank() { //默认的构造方法
}
public double getSpeed() { //带返回类型的方法
return speed;
}
public void setSpeed(double speed) { //带参数的方法
this.speed = speed;
}
public int getBullet() {
return bullet;
}
public void setBullet(int bullet) {
this.bullet = bullet;
}
}
相关知识点2
类的成员变量可以是某个类的对象
,如果用这样的类创建对象,那么该对象中就会有其他对象,也就是说该类的对象将其他对象作为自己的组成部分,这就是人们常说的Has-A。一个对象a通过组合对象b来复用对象b的方法,即对象a委托对象b调用其方法。当前对象随时可以更换所组合对象,使得当前对象与所组合的对象是弱耦合关系
。
class CD{
String name; //CD的名称
int size; //CD的大小
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}
class Computer{ //computer类
CD cd; //组合cd对象
Computer(){ //构造方法
cd = new CD();
}
}
public class Example_2 {
public static void main(String[] args) {
Computer computer = new Computer();
computer.cd.setName("假CD"); //通过cd对象来调用方法
}
}
对于这种通过组合对象来复用方法称为
"黑盒"复用
,因为当前对象只能委托所包含的对象调用其方法,这样一来,当前对象对所包含的对象的方法的细节是一无所知的
相关知识点3
类有两种基本的成员:变量和方法。变量用来刻画对象的属性;方法用来体现对象的行为(功能),即方法使用某种算法操作变量来实现一个具体的行为(功能)。成员变量用来刻画类创建的对象的属性,其中一部分成员变量称为实例变量,另一部分
成员变量称为静态变量(static)
或类变量(static)
。
类变量是与类相关联的变量,而实例变量是仅仅和对象相关联的变量。不同对象的实例变量将被分配不同的内存空间,如果类中有类变量,那么所有对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其他对象的这个类变量。
也就是说,对象共享类变量。方法是类体的重要成员之一。其中的构造方法是具有特殊地位的方法
,供类创建对象
时使用,用来给出类所创建的对象的初始状态;另一部分方法可分为实例方法和类方法(static)
,类所创建的对象可以调用这些方法形成一定的算法,体现对象具有某种行为。一个类的类方法也可以用该类的类名调用。
类中的方法可以操作成员变量,当对象调用方法时,方法中出现的成员变量就是指分配给该对象的变量,方法中出现的类变量也是该对象的变量,只不过这个变量和所有的其他对象共享而已。
class Family {
static String surname; //静态变量,类可以直接调用
String name; //实例变量
public static void setSurname(String surname) { //静态方法
Family.surname = surname;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public String getName() {
return name;
}
}
public class Example_3 {
public static void main(String[] args) {
Family.setSurname("欧"); //类直接调用静态方法
Family father = new Family();
father.getSurname(); //对象调用方法
}
}
这里主要说明静态变量就是使用static修饰的变量,同理静态方法也是使用static修饰的方法,静态方法以及静态变量可以被类直接调用,但要注意一点静态方法
可以操作静态变量,但是不能操作实例变量
作业调度
作业调度主要是从后备状态的作业中挑选一个作业投入运行.根据不同的调度目标,有不同的调度算法
调度算法的选择
调度算法的选择主要有以下五点原则:响应时间快;周转时间或加权周转时间短;均衡的资源利用率;吞吐量大;系统反应时间短
调度算法
调度算法有许多种,常见的有如下几种
先来先服务
(FCFS):按作业到达的先后次序调度,它不利于短作业
短作业优先
(SJF):按作业的估计运行时间调度,估计运行时间短的作业优先调度,它不利于长作业,可能会使一个估计运行时间长的作业迟迟得不到服务。
项应比高者优先(HRN)
:综合上述两者,既考虑作业估计运行时间,又考虑作业等待时间,响应比是:
HRN=(估计运行时间+等待时间)/估计运行时间
优先级调度
算法:根据作业的优先级别,优先级高者先调度、
均衡调度
算法:根据系统运行情况和作业本身进行分类,调度程序从这些分类中轮流挑选作业执行。
就平均周转时间和平均周转系数来说,短作业优先算法最小,先来先服务算法最大,响应比高者优先算法居中
CET4P209
- progressive
- residence
- whichever
- rob
- resemble
- economical
- explosion
- perception
- whereas
- annoy
- recommend