瑞翼工坊项目纪实(九)
定积分的介绍
数学定义:如果函数f(x)在区间[a,b]上连续,用分点xi将区间[a,b]分为n 个小区间,在每个小区间[xi-1,xi]上任取一点ri(i=1,2,3„,n),作和式f(r1)+...+f(rn) ,当n趋于无穷大时,上述和式无限趋近于某个常数A,这个常数叫做y=f(x) 在区间上的定积分. 记作/ab f(x) dx 即 /ab f(x) dx =limn>00 [f(r1)+...+f(rn)],这里,a 与 b叫做积分下限与积分上限,区间[a,b] 叫做积分区间,函数f(x) 叫做被积函数,x 叫做积分变量,f(x)dx 叫做被积式。
几何定义:可以理解为在 Oxy坐标平面上,由曲线y=f(x)与直线x=a,x=b以及x轴围成的曲边梯形的面积值(一种确定的实数值)。
用java语言编译一个自动计算定积分的函数:
import java.util.*;
public class DefiniteIntegralApp {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// 提示用户输入积分上下限
System.out.println("请输入积分上下限:");
// 定义积分上下限a,b,有控制台输入
double a = input.nextDouble();
double b = input.nextDouble();
double sum = 0;
// 求出区间差,分成10000个区间,区间越小,误差越小
double e = cha(a, b, 10000.0);
// 求和,循环从第一个区间叠加到第10000个
for (int j = 1; j <= 10000; j++) {
double x = zhongjian(a, b,10000.0, j);
sum = sum + f(x);
}
System.out.print("f(x)=2*x*x+x的定积分:");
System.out.println(sum * e);
}
// 定义被积函数,可以修改
public static double f(double x) {
return 2*x*x+x;
}
// 定义第i个区间的中点值,即定义积分变量
public static double zhongjian(double a, double b, double n, int i) {
return a + i * (b - a) / n;
}
// 定义每个小区间的间隔差,即将范围分成n个等区间
public staticdouble cha(double a, double b, double n) {
return (b - a) /n;
}
}
内部类
Java允许类可以有一种成员:内部类。
Java支持在一个类中定义另一个类,这个类称做内部类,而包含内部类的类称为内部类的外嵌类。
内部类和外部类之间的重要关系
(1)内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法;
(2)内部类的类体中不可以声明变量和类方法,外嵌类的类体中可以用内部类声明对象,作为外嵌类的成员;
(3)内部类仅供它的外嵌类使用,其他类不可以使用某个类的内部类声明对象;
Java编译器生成的内部类的字节码文件的名字和通常的类不同,内部类对应的字节码文件的名字格式是“外嵌类名$内部类名”。
内部类可以被static修饰
类是一种数据类型,那么static内部类就是外嵌类中的一种静态数据类型,这样一来,程序就可以在其他类中使用static内部类来创建对象,static内部类不能操作外嵌类中实例成员变量。
匿名类
Java允许我们直接用一个类的子类的类体创建一个子类对象,也就是说创建子类对象时,除了使用父类的构造方法还有类体,此类体被认为是一个子类去掉类声明后的类体称做匿名类。
Bank的匿名子类:
new Bank() {
匿名类的类体
};
注意:结尾加分号。
匿名类可以继承父类的方法也可以重写父类的方法。
使用匿名类时,必然是在某个类中匿名类创建对象,因此匿名类一定是内部类。
匿名类可以访问外嵌类中的成员变量和方法,匿名类的类体中不可以声明static成员变量和static方法。
由于匿名类是一个子类,但没有类名,所以用匿名类创建对象时,要直接使用父类的构造方法。
匿名对象的引用可以传递给一个匹配的参数。
与接口有关的匿名类:
Java允许直接用接口名和一个类体建立一个匿名对象。
假设Computable是一个接口,此类体被认为是实现了Computable接口的类去掉类声明后的类体,称做匿名类。
new Computable() {
实现接口的匿名类的类体
}
如果某个方法的参数是接口类型,那么可以使用接口名和类体组合创建一个匿名对象传递给方法的参数,类体必须要重写接口中的全部方法。
异常类
异常是指程序运行时可能出现的一些错误。
try — catch 语句
try {
包含可能发生异常的语句
}catch(ExceptionSubClass1 a) {
}catch(ExceptionSubClass1 b) {
}
一旦try部分抛出异常,或调用某个可能抛出异常对象的方法,并且该方法抛出了异常对象,那么try部分将立刻结束执行,转向相应的catch部分。
程序可以将发生异常后的处理放在
catch部分
try — catch语句可以由几个catch组成,分别处理发生的相应异常。各个catch参数中的异常类都是Exception的某个子类,表示try部分可能发生的异常,这些子类之间不能有父子关系,否则保留一个含有父类参数的catch即可。
自定义异常类
在编写程序时可以扩转Exception类定义自己的异常类,然后根据程序的需要来规定哪些方法产生这样的异常。
一个方法在声明时可以使用throws关键字声明产生的若干个异常,并在该方法的方法体中具体给出产生异常的操作,即用相应的异常类创建对象,并使用throw关键字抛出该异常对象,导致该方法结束执行。
时光悄然而逝,不知不觉,本次的瑞翼工坊课程已经进入尾声。本次瑞翼工坊课堂的上课效果非常好。两位小老师认真负责、悉心教导、倾囊相授。同学们也认真聆听、积极踊跃,这也充分展现了瑞翼工坊“对话式教学”的魅力。台上的小老师把自己最擅长的知识和自己的学习经验分享给台下的同学们,与此同时也更加透彻的理解讲授的知识。台下的同学们从中收获了不一样的思维方式以及最适合自己的学习方法,以此达到“双赢”,这也是设立瑞翼工坊的初衷。我相信,同学们在这种互帮互学、共同进步的学习氛围中,不久的将来一定涌现出许许多多大数据的专业人才,为实现中国梦贡献出一份强大的力量!