发表于: 2018-09-10 22:35:25
2 442
一、今日完成:
1.新建maven项目的时候,显示目录没有出现src,主界面显示error,maven执行终止。网上查询后,普遍解释为加载太慢,目录没有显示完全,但我这种情况明显是已经加载好的,卸载以后重新装了一次还是出现这种问题,请教师兄orz.
2.于是先学习了一波java基本知识
框架
框架,即framework。其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。
因为软件系统发展到今天已经很复杂了,特别是服务器端软件,设计到的知识,内容,问题太多。在某些方面使用别人成熟的框架,就相当于让别人帮你完成一些基 础工作,你只需要集中精力完成系统的业务逻辑设计。而且框架一般是成熟,稳健的,他可以处理系统很多细节问题,比如,事物处理,安全性,数据流控制等问 题。还有框架一般都经过很多人使用,所以结构很好,所以扩展性也很好,而且它是不断升级的,你可以直接享受别人升级代码带来的好处。
框架一般处在低层应用平台(如J2EE)和高层业务逻辑之间的中间层。
软件为什么要分层?
为了实现“高内聚、低耦合”。把问题划分开来各个解决,易于控制,易于延展,易于分配资源…总之好处很多啦:)
spring(由Rod Johnson创建的一个开源框架)
Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。
Java 封装
在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
Java 对象和类
Java中的对象
现在让我们深入了解什么是对象。看看周围真实的世界,会发现身边有很多对象,车,狗,人等等。所有这些对象都有自己的状态和行为。
拿一条狗来举例,它的状态有:名字、品种、颜色,行为有:叫、摇尾巴和跑。
对比现实对象和软件对象,它们之间十分相似。
软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现。
在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。
Java中的类
类可以看成是创建Java对象的模板。
通过下面一个简单的类来理解下Java中类的定义:
public class Dog{
String breed;
int age;
String color;
void barking(){
}
void hungry(){
}
void sleeping(){
}
}
一个类可以包含以下类型变量:
局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。
一个类可以拥有多个方法,在上面的例子中:barking()、hungry()和sleeping()都是Dog类的方法。
构造方法
每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。
下面是一个构造方法示例:
public class Puppy{
public Puppy(){
}
public Puppy(String name){
// 这个构造器仅有一个参数:name
}
}
创建对象
对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象。创建对象需要以下三步:
声明:声明一个对象,包括对象名称和对象类型。
实例化:使用关键字new来创建一个对象。
初始化:使用new创建对象时,会调用构造方法初始化对象。
下面是一个创建对象的例子:
public class Puppy{
public Puppy(String name){
//这个构造器仅有一个参数:name
System.out.println("小狗的名字是 : " + name );
}
public static void main(String []args){
// 下面的语句将创建一个Puppy对象
Puppy myPuppy = new Puppy( "tommy" );
}
}
编译并运行上面的程序,会打印出下面的结果:
小狗的名字是 : tommy
访问实例变量和方法
通过已创建的对象来访问成员变量和成员方法,如下所示:
/* 实例化对象 */
ObjectReference = new Constructor();
/* 访问类中的变量 */
ObjectReference.variableName;
/* 访问类中的方法 */
ObjectReference.methodName();
接口与类相似点:
一个接口可以有多个方法。
接口文件保存在 .java 结尾的文件中,文件名使用接口名。
接口的字节码文件保存在 .class 结尾的文件中。
接口相应的字节码文件必须在与包名称相匹配的目录结构中。
接口与类的区别:
接口不能用于实例化对象。
接口没有构造方法。
接口中所有的方法必须是抽象方法。
接口不能包含成员变量,除了 static 和 final 变量。
接口不是被类继承了,而是要被类实现。
接口支持多继承。
抽象类和接口的区别
1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
java变量与数据类型
变量是在内存中分配的保留区域的名称。换句话说,它是内存位置的名称。这意味着它的值可以改变。
int data=50;// 这里 data 就是一个变量。
Java
变量类型
java中有三种类型的变量:
局部变量
实例变量
静态变量
1)局部变量
在方法内声明的变量称为局部变量。
2)实例变量
在类中声明但在方法外部的变量称为实例变量。但它不被声明为静态(未加static修辞符)。
3)静态变量
被声明为static的变量(加static修辞符)称为静态变量。它不能是局部的。
我们将在下一章中详细学习这些变量。
下面看几个示例来了解java中的变量类型。
class A{
int data=50;//实例变量
static int m=100;// 静态变量
void method(){
int n=90;//局部变量
}
}//end of class
Java数据类型
数据类型表示要存储在变量中的不同类型的值。 在Java中,有两种类型的数据类型:
原始数据类型
非原始数据类型
数据类型 默认值 默认长度
boolean false 1 bit
char '\u0000' 2 byte
byte 0 1 byte
short 0 2 byte
int 0 4 byte
long 0L 8 byte
float 0.0f 4 byte
double 0.0d 8 byte
为什么char在java中使用2个字节以及什么是\u0000?
这是因为java使用Unicode系统而非ASCII码系统编码。 \u0000是Unicode系统的最低范围。
Java变量示例:两个数字相加
class Simple{
public static void main(String[] args){
int a = 10;
int b = 10;
int c = a + b;
System.out.println(c);
}
}
Java
输出结果:
20
Shell
Java变量示例:加宽
class Simple{
public static void main(String[] args){
int a=10;
float f=a;
System.out.println(a);
System.out.println(f);
}
}
Java
输出结果:
10
10.0
Shell
Java变量示例:缩小(转换)
class Simple{
public static void main(String[] args){
float f=10.5f;
//int a=f;//Compile time error
int a=(int)f;
System.out.println(f);
System.out.println(a);
}
}
Java
输出结果:
10.5
10
Shell
Java变量示例:溢出
class Simple{
public static void main(String[] args){
//Overflow
int a=130;
byte b=(byte)a;
System.out.println(a);
System.out.println(b);
}
}
Java
输出结果:
130
-126
Shell
Java变量示例:较低类型相加
class Simple{
public static void main(String[] args){
byte a=10;
byte b=10;
//byte c=a+b;//Compile Time Error: because a+b=20 will be int
byte c=(byte)(a+b);
System.out.println(c);
}
}
Java
输出结果:
20
jdbc学习
通过这个图,就能很清晰的看出来jdbc所在位置与作用。
数据库驱动
数据库软件可以由各个数据库厂商提供,我们熟知的mysql,oracle,sqlserver,access,db2等等都是由不同的厂商提供的,既有不同的开发商开发,因此对于数据库软件的实现过程都不尽相同。
定义应用程序和数据库之间进行交互的规则(标准)。这个标准称之为驱动(Driver)。
开发商在开发数据库软件时提供针对于Driver标准的实现,应用开发人员再开发时,通过标准Driver的调用转换成对实际数据库Driver程序的调用。
因此,每一款数据库软件在实现时都会提供相对于Driver标准的一些列接口和类的实现。更明确一点说我们需要获取人家提供的这个驱动包才能保证程序和数据库之间的连接。
JDBC的执行流程:
1.由DriverManager根据数据库的URL标识,自动识别查找注册给DriverManager的多个Driver对象,
2.通过调用Driver对象的Connect方法和数据库之间建立起来连接(此时返回Connection对象)
3.建立起来连接之后,由Statement对象负责搬运sql语句到数据库服务端执行,然后将执行结果搬回程序端
4.处理程序端返回的ResultSet。
jdbc编程步骤
1.注册驱动(加载驱动):
注册的方式:
1.使用类加载器(使用反射的方式)
Class.forName(driverName);
2.实例化Driver
Driver driver = new oracle.jdbc.driver.OracleDriver();
DriverManager.registerDriver(driver);
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
3.加虚拟机参数jdbc.drivers
-Djdbc.drivers=oracle.jdbc.driver.OracleDriver
2.建立连接
连接方式:
1.DriverManager的getConnection方法
getConnection(url);//没有用户名密码
//将用户名密码存放在java.util.Properties对象中
getConnection(url,properties);
getConnection(url,user,passwd);
DriverManager中的getConnection其实也是调用的Driver.connect方法,因此可以直接使用。
2.直接调用Driver.connect方法执行
Driver d = new oracle.jdbc.driver.OracleDriver();
d.connect(url,properties);
3.创建Statement:
Statement:connection.createStatement();
1.创建时不需要传递sql语句,但是执行时需要传递sql语句
2.如果涉及到动态参数的传递,必须使用字符串拼接
PreparedStatement:connection.prepareStatement(String sql);
1.创建时就需要传递sql语句,执行的时候不需要传递sql语句
2.如果涉及到动态参数的传递,可以使用字符串拼接,也可以使用?占位的形式
给?号传值使用的是
pstmt.setType(index,value);
index从1开始
3.提供预编译的功能,某种程度上可以避免sql注入的问题
4.提前做语法检查,在给?赋值的过程中要求数据类型一定要匹配,这样在某种程度上可以避免因为数据类型不匹配而发生的异常
CallableStatement:主要用来执行pl/sql的一些过程,函数等。
4.执行sql语句:
execute:返回boolean类型的值,代表是否有结果集返回(如果执行select操作,是有ResultSet的,返回值为true)
executeUpdate:返回int类型的值,代表的是,操作执行完成后,受影响的数据库的行计数(针对于insert,update,delete)
executeQuery:返回的是ResultSet
ResultSet:类似于指针或者游标的东西,里边保存的不是所有的结果,而是指向结果集的正上方。所以如果一旦连接关闭那么ResultSet将取不到值
5.处理结果:有结果集,处理结果集
ResultSet
next(),每执行一次,向下移动一次,如果有值,返回true,如果没值返回false
while(rs.next()){
rs.getType(index/columnName);
如果传的是index,那么索引是从1开始的。
例如:
执行select id,last_name from s_emp;
那么1代表的就是id,依次类推
}
6.关闭资源
二、明日计划:
再用Eclipse试一下,希望能把问题解决掉,尽快上手写java语句,操作数据库。
三、问题:
新建maven项目的时候,出现这个错误:Maven execution terminated abnormally (exit code 1)。是什么原因?
还有,Create From Archetype的时候应该选哪一种,有什么区别吗?
四、收获:
知道了对象和类的区别,以及如何创建对象,变量类型,数据类型及其基本操作,还有jdbc的执行流程。
评论