电子商务解决方案设计.docx
《电子商务解决方案设计.docx》由会员分享,可在线阅读,更多相关《电子商务解决方案设计.docx(22页珍藏版)》请在冰豆网上搜索。
电子商务解决方案设计
《电子商务解决方案设计》教案
实验一:
java基础
(一)
一、java入门
JavaSE:
javastandardedition
JavaME:
javamicroedition
JavaEE:
javaenterpriseedition
Java是由sun公司推出(但2010年被oracle公司收购,收购价格:
74亿美元)
从j2se、j2me、j2ee的演变,从jdk5.0开始称为se、me、ee。
1、jdk的下载与安装
Jdk:
javadevelopmentkit(java开发包)
Jre:
javaruntimeenvironment(java执行环境)
Jdk包含了jre。
下载过程见课堂演示。
安装完成后运行:
java–version如能显示版本信息,即表明java安装成功。
Jdk1.4jdk1.5(5.0)jdk1.6(6.0)
设置环境变量:
classpathpathJAVA_HOME
2、第一个java程序
编写程序时可以是记事本、ultraedit(高级文本编辑工具)、IDE(integrateddevelopmentenvironment)。
例1-1:
Test类
publicclassTest
{
publicstaticvodmain(String[]args)
{
System.out.println(“helloworld!
”);
}
}
3、java程序的编译与执行
Java程序的执行过程分为两步:
(1)编译:
javac文件名.java
(2)执行:
java文件名(这是一个后缀为class的字节码文件)
注意:
修改过的原文件,要重新执行上述的
(1)
(2)步骤。
JVM(javavirtualmachinejava虚拟机)来执行字节码文件。
二、原生数据类型
1、Java中的数据类型:
1)原生数据类型(PrimitiveDataType)
2)引用类型(对象类型)(ReferenceType)
2.变量与常量:
所谓常量,就是值不会变化的量;所谓变量,就是值可以变化的量。
3.变量定义与赋值:
(1)变量类型变量名;
变量名=变量值;
inta;
a=2;
(2)变量类型变量名=变量值;
inta=1;
=表示赋值,将等号右边的值赋给了左边的变量。
4、变量名命名规则:
在Java中,变量名以下划线、字母、$符号开头,并且后跟下划线、字母、$符号以及数字。
总之,Java中的变量名不能以数字开头。
5、注释:
注释是给人看的,不是给计算机看的。
Java中共有3种类型的注释:
1)单行注释:
以//开头,//后面的所有内容均被当作注释处理。
2)多行注释:
以/*开头,以*/结束,中间的所有内容均被当作注释处理。
关于多行注释,需要注意的是,多行注释不能嵌套。
3)另一种多行注释。
用于产生JavaDoc帮助文档。
暂且不介绍。
/**注释内容*/
6、Java中的原生数据类型共有8种:
1)整型:
使用int表示。
(32位)
2)字节型:
使用byte表示。
(表示-128~127之间的256个整数)。
3)短整型:
使用short表示。
(16位)
4)长整型:
使用long表示。
(64位)
5)单精度浮点型:
使用float表示。
所谓浮点型,指的就是小数,也叫做实数,比如1.2。
6)双精度浮点型:
使用double表示。
双精度浮点型表示的数据范围要比单精度浮点型大。
7)字符型:
使用char表示(char是character的缩写)。
所谓字符,就是单个的字符表示,比如字母a,或者中文张,外面用单引号包围上。
比如chara=‘B’;charb=‘张’;
8)布尔类型,使用boolean表示。
布尔类型只有两种可能值,分别是true与false。
7、变量使用过程中应注意的问题:
1)Java中的所有浮点类型默认情况下都是double。
不能将double类型的值赋给float类型的变量,即便该double类型的值处于float类型的范围内也是不可以的。
总之,能否成功赋值取决于等号右边的值类型与等号左边的变量类型是否一致。
2)如何将double类型的值赋给float类型的变量?
答案就是
(1)强制类型转换,将double类型的值强制转换为float类型。
(2)使用java语言的支持。
强制转换的语法:
类型变量名=(类型)变量值;
3)变量在使用前必须要赋值;变量必须要声明其类型方可使用;变量在使用前必须要定义,并且只能定义一次。
4)如下代码无法通过编译:
inta=1;
shortb=a;
a是int类型,b是short类型,int类型表示的数据范围要比short类型大,不能将表示范围大的值赋给表示范围小的变量。
5)如下代码可以通过编译:
shorta=1;
intb=a;
a是short类型,b是int类型,int类型表示的数据范围要比short类型大,可以将表示范围小的值赋给表示范围大的变量。
总结:
可以将表示范围小的值赋给表示范围大的变量;但不能直接将表示范围大的值赋给表示范围小的变量,只能通过强制类型转换实现。
上述内容验证见实例:
test、variable1、variable2
三、运算符
1、算术运算符:
1)当有若干个变量参与运算时,结果类型取决于这些变量中表示范围最大的那个变量类型。
比如,参与运算的变量中,有整型int,有双精度浮点型double,有短整型short,那么最后的结果类型就是double。
2)inta=1;
intb=2;
doublec=(double)a/b;
上面的代码中,a与b都是整型,但是通过(double)a这种转换将a转换为一个匿名的变量,该变量的类型是double,但是要注意:
a本身依旧是int类型,而不是double类型,这样,(double)a/b就是double类型除以int类型,结果自然是double类型。
3)取模运算符:
使用%表示。
inta=5;
intb=3;
intc=a%b;
上面代码的运行结果是2,因为5除以3结果是1余2。
取模的规律:
取模的结果符号永远与被除数的符号相同
inta=5;
intb=-3;
intc=a%b;
被除数是5,那么取模的结果是2
inta=-5;
intb=3;
intc=a%b;
被除数是-5,那么取模的结果是-2。
上述内容验证见实例:
variable3
2、关系运算符:
关系运算符:
大于(>)、小于(<)、等于(==)、不等于(!
=)、大于等于(>=)、小于等于(<=),关系运算的结果是个boolean值。
见实例:
OperatorTest
3、逻辑运算符:
重点讲解两个,逻辑运算符本身也返回一个boolean值。
1)逻辑与:
使用&&表示,逻辑与是个双目运算符(即有两个操作数的运算符),只有当两个操作数都为真的时候,结果才为真;其余情况结果均为假。
逻辑与表示的并且的意思。
2)逻辑或:
使用||表示,逻辑或也是个双目运算符,只有当两个操作数都为假的时候,结果才为假;其余情况结果均为真。
逻辑或表示或者的意思。
见实例:
LogicTest
4、关于变量的自增与自减运算。
1)关于intb=a++,作用是将a的值先赋给b,然后再让a自增1。
2)关于intb=++a,作用是将a的值先自增1,然后将自增后的结果赋给b。
见实例:
Variable4
5、条件运算符(三元表达式),其形式为:
typed=a?
b:
c;具体化形式为:
intd=2<1?
3:
4;
注意:
轻量级的文本编辑器:
UltraEdit、Editplus、vi、vim、gvim
见实例:
Test2
四、流程控制语句
1、if语句
第一种形式:
if(布尔表达式)
{
//待执行的代码
}
第二种形式:
if(布尔表达式)
{
//待执行的代码
}
else
{
//待执行的代码
}
第三种形式:
if(布尔表达式)
{
//待执行的代码
}
elseif(布尔表达式)
{
//待执行的代码
}
elseif(布尔表达式)
{
//待执行的代码
}
else
{
//待执行的代码
}
见实例:
IfTest
2、switch语句:
switch(变量)//此处的变量类型就目前所学内容来看,只能为4种类型:
byte,short,int,char。
{
case常量1:
//待执行的代码
break;
case常量2:
//待执行的代码
break;
case常量3:
//待执行的代码
break;
default:
//待执行的代码
}
虽然case语句中的break是可选的,但在绝大多数情况下,如果没有break,程序的逻辑就会发生错误,因此,通常情况下都需要加上break。
见实例:
SwitchTest
3、循环控制语句
Java中的循环控制语句一共有3种,分别是while,do…while以及for循环。
1)while循环,形式为:
while(布尔表达式)
{
//待执行的代码
}
2)do…while循环,新式为:
do
{
//待执行的代码
}
while(布尔表达式);
while与do…while之间的区别:
如果布尔表达式的第一次判断就为false,那么while循环一次也不执行;do…while循环则会执行一次。
如果布尔表达式第一次判断为true,那么while循环与do…while循环等价。
3)for循环(使用最多的一种循环),形式为:
for(变量初始化;条件判断;步进)
{
//待执行的代码
}
for循环的执行过程:
a)执行变量初始化。
b)执行条件判断。
如果条件判断结果为假,那么退出for循环,开始执行循环后面的代码;如果条件判断为真,执行for循环里面的代码。
c)执行步进。
d)重复步骤b。
上述内容见实例:
WhileTest、DoWhileTest、ForTest
break语句:
经常用在循环语句中,用于跳出整个循环,执行循环后面的代码。
2.continue语句:
经常用在循环语句中,用于跳出当前的这个循环(或者是跳出本次循环),开始下一次循环的执行。
实验二:
java基础
(二)
一、面向对象程序设计(ObjectOrientedProgramming,OOP;ObjectOrientedDesign,OOD)
什么是面向对象?
在面向对象程序设计中有两个重要的概念:
类(class)与对象(object)。
1、类:
类是一种抽象的概念,类中包含了数据(通常使用名词来表示)与对数据的操纵(通常使用动词来表示)。
比如说人就是一种抽象的概念,人具有姓名、年龄、身高等数据,还有吃饭、跑步等操纵数据的动作。
2、对象:
对象是一种具体的概念,是类的一种具体表示方式。
比如说人是一个类,而张三、李四、王五等具体的人就是对象。
3、类所包含的内容,类一共包含两部分内容:
a)数据,数据在类中称作属性(Property或者Attribute)或者叫成员变量(Membervariable)。
b)对数据的操纵,这种操纵在类中称作方法(method)。
二、类及方法的定义
面向对象程序设计的三大基本特征:
继承、封装、多态
封装:
类包含了数据与方法,将数据与方法放在一个类中就构成了封装。
1、类的定义:
修饰符class类的名字
{
//类的内容(包含了属性与方法)
}
2、方法的定义:
修饰符返回类型方法名称([参数1,参数2,参数3…])
{
//方法体
}
注意:
1)main方法是整个Java程序的入口点,如果类的定义中没有main方法,则程序无法执行。
2)方法定义不能嵌套,也就说不能在一个方法中定义另外一个方法。
方法只能定义在类中。
3)关于方法的执行:
首先需要定义方法,接下来就可以使用方法(调用方法),当方法调用完毕后,方法可以返回值。
方法到底是否返回值是由方法的定义决定的。
4)如果一个java源文件中定义了多个类,那么这些类中最多只能有一个类是public的,换句话说,定义的多个类可以都不是public的。
Main方法要放在public类中,如果没有public类,那Main方法放在哪个类中都可以。
3、生成对象:
通过类来生成对象(通常使用new关键字来生成对象)。
publicclassPerson
{
}
类名变量名=new类名();
Personperson=newPerson();
Personperson2=newPerson();
Personperson3=newPerson();
4、方法的调用:
方法调用需要通过对象来完成,方法调用的形式是:
对象变量.方法名([参数值1,参数值2,参数值3….]);
关于方法的注意事项:
1)在方法定义中,方法的返回类型与return后面的变量或常量类型保持一致。
2)在方法调用时,给方法传递的参数需要与方法定义时的参数保持一致(参数个数一致,参数类型一致)。
3)方法定义时的返回类型与接收方法返回值的变量类型保持一致。
publicintadd(inta,intb)
{
returna+b;
}
方法定义时的参数叫做形式参数。
inta=test.add(8,3);
方法调用时所赋予的具体值叫做实际参数。
4)关键字void表示方法不返回值。
如果方法不返回值,那么声明方法的时候使用void关键字,在方法定义中可以有两种情况实现不返回值:
a)不使用return语句。
b)使用return,但return后面没有任何值或者变量,return后面只有一个分号,表示退出方法,返回到方法的调用端。
使用方式:
return;
上述内容见实例:
Test
5、属性的定义和使用:
类中的属性又叫做成员变量(membervariable),属性用英文表示为property或者attribute。
对象(Object)又叫做实例(Instance)。
生成一个对象的过程又叫做实例化。
1)命名约定
a)类:
首字母大写,如果一个类名由多个单词构成,那么每个单词的首字母都大写,中间不使用任何的连接符。
比如Person类,MemberTest类。
b)方法:
首字母小写。
如果一个方法由多个单词构成,那么第一个单词的所有字母全都小写,从第二个单词开始,每个单词的首字母大写。
比如add,addThreeInt。
c)属性:
命名约定与方法相同。
比如age,ageOfPerson。
2)属性需要定义在类中,又叫做成员变量;而定义在方法中的变量叫做局部变量。
3)定义属性
publicclassPerson
{
修饰符类型属性名称;
}
4)使用属性
与方法一样,使用.运算符。
首先需要生成类的实例,然后使用实例+”.”的方式来使用属性。
比如:
Personperson=newPerson();
person.age
局部变量使用前必须要声明并赋初值;成员变量使用前必须要声明,但可以不赋初值。
5)成员变量与局部变量的联系与区别:
a)无论是成员变量还是局部变量,使用前都需要声明(定义)。
b)对于局部变量来说,使用前必须要初始化;对于成员变量来说,使用前可以不初始化。
如果没有初始化成员变量就开始使用,那么每个类型的成员变量都有一个默认的初始值
i.byte、short、int、long类型的初始值为0
ii.float、double类型的初始值为0.0
iii.char类型的初始值‘\u0000’
iv.boolean类型的初始值为false
上述内容见实例:
Person
6、引用类型(referencetype):
引用类型是用在对象上的。
一个对象可以被多个引用所指向,但同一时刻,每个引用只能指向唯一的一个对象。
如果一个对象被多个引用所指向,那么无论哪个引用对对象的属性进行了修改,都会反映到其他的引用当中。
上述内容见实例:
People
在该实例中用画图表示。
注意:
1)如果一个类包含了属性与方法,那么该类的每一个对象都具有自己的属性,但无论一个类有多少个对象,这些对象共享同一个方法。
2)关于方法参数传递的总结:
对于Java中的方法参数传递,无论传递的是原生数据类型还是引用类型,统一是传值(passbyvalue)。
3)什么类型的引用就能指向什么类型的对象,比如People类型的引用就能指向People类型的对象,但不能指向Student类型的对象。
比如:
Peoplepeople=newPeople();//正确
Peoplepeople=newStudent();//错误
上述内容见实例:
ParamTest
三、构造方法:
构造方法(Constructor):
构造方法用于完成对象属性的初始化工作。
1、构造方法的特点:
a)构造方法的名字必须与类名完全一致(包含大小写)
b)构造方法没有返回值,连void也不能出现。
c)如果在定义一个类的时候,没有为类声明构造方法,那么Java编译器会自动为类添加一个没有参数且方法体为空的构造方法(默认的构造方法)
d)如果在定义一个类的时候,为类声明了构造方法,那么Java编译器就不会再为类添加构造方法了。
e)不能显式调用类的构造方法,构造方法通常是通过new关键字隐式调用。
2、new关键字在生成对象时完成了三件事情:
a)为对象开辟内存空间。
b)调用类的构造方法。
c)将生成的对象的地址返回。
3、默认的构造方法:
构造方法没有参数且方法体为空。
使用new来生成对象的时候,后面的小括号()表示构造方法的参数列表,如果构造方法不接收参数,那么小括号中的内容为空;如果构造方法接收参数,那么小括号中的实际参数就需要与构造方法定义中的形式参数保持一致(参数数量一致、参数类型一致、按照顺序逐一赋值)。
上述内容见实例:
PersonTest
四、方法的重构和重载(overload)
1、方法的重构:
如果在子类中定义的方法与其直接超类(父类)的某个方法有相同的名称和参数,则称该子类重构了该超类(父类)的该方法。
方法重构(Override):
子类与父类的方法返回类型一样、方法名称一样,参数一样,这样我们说子类与父类的方法构成了重写关系。
2、方法的重载:
同一个类中,定义了两个或多个方法名字相同,但方法参数不同,这就表明了方法间的重载关系。
方法参数不同有两层含义:
1)参数个数不同。
2)参数类型不同。
注意:
方法的返回值对重载没有任何影响。
上述内容见实例:
OverLoadTest、OverLoadTest2
注意:
方法重构与方法重载之间的关系:
重载发生在同一个类内部的两个或多个方法。
重构发生在父类与子类之间。
五、继承(Inheritence):
1、定义及格式:
Java是单继承的,意味着一个类只能从另一个类继承(被继承的类叫做父类【基类,baseclass】,继承的类叫做子类),Java中的继承使用extends关键字。
格式:
class类名extends类名
2、注意:
1)父类有的,子类也有
2)父类没有的,子类可以增加3)父类有的,子类可以改变
4)构造方法不能被继承
5)方法和属性可以被继承
6)在定义一个类的时候,如果没有显式指定该类的父类,那么该类就会继承于java.lang.Object类(JDK提供的一个类,Object类是Java中所有类的直接或间接父类)。
上述内容见实例:
Child、InheritenceTest
六、多态:
多态(Polymorphism):
我们说子类就是父类(玫瑰是花,男人是人),因此多态的意思就是:
父类型的引用可以指向子类的对象。
但要注意的是:
这个父类型的引用在执行所指向子类的方法时,该方法一定是父类中存在的方法。
上述内容见实例:
PolyTest
七、接口(interface):
1、接口的地位等同于class,接口中的所有方法都是抽象方法。
在声明接口中的方法时,可以使用abstract关键字,也可以不使用。
通常情况下,都会省略掉abstract关键字。
2、类可以实现接口。
实现使用关键字implements表示,代表了某个类实现了某个接口。
一个类实现了某个接口,那么该类必须要实现接口中声明的所有方法。
Java是单继承的,也就是说某个类只能有唯一一个父类;一个类可以实现多个接口,多个接口之间使用逗号分隔。
上述内容见实例:
Test3
八、一些关键字:
1、static关键字:
可以用于修饰属性,也可以用于修饰方法,还可以用于修饰类(后面的课程讲)
1)static修饰属性:
无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量;一个对象对该静态成员变量进行了修改,其他对象的该静态成员变量的值也会随之发生变化。
如果一个成员变量是static的,那么我们可以通过类名.成员变量名的方式来使用它(推荐使用这种方式)。
上述内容见实例:
StaticTest
2)static修饰方法:
static修饰的方法叫做静态方法。
对于静态方法来说,可以使用类名.方法名的方式来访问。
注意:
不能在静态方法中访问非静态成员变量;可以在静态方法中访问静态的成员变量。
可以在非静态方法中访问静态的成员变量。
总结:
静态的只能访问静态的;非静态的可以访问一切。
见实例:
StaticTest5
2、final关键字:
final可以修饰属性、方法、类。
1)final修饰类:
当一个类被final所修饰时,表示该类是一个终态类,即不能被继承。
2)final修饰方法:
当一个方法被final所修饰时,表示该方法是一个终态方法,即不能被重写(Override)。
3)final修饰属性:
当一个属性被final所修饰时,表示该属性不能被改写。
上述内容见实例:
FinalTest、FinalTest2、FinalTest3
3、包(package)。
用于将完成不同功能的类分门别类,放在不同的目录(包)下。
包的命名规则:
将公司域名反转作为包名。
,com.myjjx(包名),对于包名:
每个字母都需要小写。
如果定义类的时候没有使用package,那么Java就认为我们所定义的类位于默认包里面(defaultpackage)。
1)编译带有package声明的Java源文件有两种方式:
a)直接编译,然后根据类中所定义