学习一个网站的全套,后来想放这个网站的链接,然后找不着了。。。罪恶感,实时更新,包含很多自己的理解,不严谨请海涵。
说一下我们的目标。完成SSM框架的学习,并实现天猫全栈。
JDK Java SE Development kit Java开发工具包
JRE Java Runtime Environment Java运行环境
JVM Java Virtual Machine Java虚拟机
以win10为例
好的。结束后,开心的 WIN键+R(cmd)在命令行里输入 java、javac
当你搞完这两个出来一堆(卧槽什么东西一长串)这种东西。你就配完环境变量了!!!
恭喜你,准备开始JAVA之旅吧!!!
打开你除了C盘里任何一个盘,在改盘下,新建一个记事本
好,在里面输入(你要不想打,先复制)(你会遇到很多问题,大小写,空格,中英文输入的切换,都可能成为你的拦路虎)
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World!");
}
}
保存后,先看下你的
这个开没开,开的话,你建的记事本后面有.txt 的后缀。
把它全选,改成—> HelloWorld.java
打开你可爱的(win+R)输入cmd
放一下成功运行的图:
Congratulations!!!!,又进一步!!!
(TIP:在运行 第一步时你会发现,你的HelloWorld.java文件旁边出现了一个HelloWorld.class文件。这是为啥呢?)
来我们简述一下JAVA文件的运行原理(如图所示,上述步骤自行带入理解)
原则上,用上述的开发,也是可以的,IDE开发呢,让你开发更加方便。
理解上呢,就像盖房子,你只有砖头水泥,理论上是可以盖出来的。然后呢用IDE就像给了你很多盖房的工具事半功倍呀。
NM,你说的IDE是什么NM东西(这位同学一看就来祖安)
IDE集成环境:(Integrated Development Environment),可以辅助du开发程序的应用软件,就是你用来编程的软件。JAVA有很多IDE:Eclipes、MyEclipes、IDEA、VScode也都是可以的。
我们使用一开始使用Eclipes
要注意,在下载的时候,要注意查看,你的JDK是多少位的,最好相对应。
即:JDK(32/64)位——>Eclipes(32/64)位
不多比比
来给大家增加一波奇怪的知识(其他的同学们自行发现)
功能 | 快捷键 |
---|---|
批量修改 | Alt+Shift+R |
快速增加main函数 | Alt+/ |
快速输入System.out.println | 1.输入syso 2.Alt+/ |
快速输入for | 1.输入for 2.Alt+/ |
查看Java源代码 | 1.选中方法 2.F3 |
快速注释: | 1.选中代码块 2.Ctrl+Shift+C |
快速解决提示 | 1.找到出错行 2. Ctrl+1 |
大/小写转换 | 1.选中代码块 2. Ctrl+Shift+X/Y |
生成构造方法 | 1.选中代码块 2. Ctrl+Shift+X/Y |
首先明确,什么是面向对象。通过软件工程导论来总体认识面向对象的概念请见我的另一篇实时更新博客——软件工程导论笔记。
这一部分可能会用到UML图。
”WCNM啥是UML图!!!劳资是来学JAVA的!!!“暴躁小伙如是问
UML是面向对象中的一种。。。怎么说。。画图技术。帮你更好的理解面向对象。
(先系统说一下类和对象。到后面我们有一节会详细介绍)
比如说:我们要做一个学生管理系统(什么年代了,还尼玛做学生管理系统!!!)。
那么什么是类呢:
(辣鸡,你这上来百度百科,我不会吗?水平不行呀,拉走下一篇。别急,举个栗子)
1:(还真尼玛是栗子!)
比如在学校中:有老师、学生,我们就可把老师学生当作类。(卧槽!我还把人当作类呢,可以不!!没错是可以的。想建什么类都可以,但是在项目开发中我们要符合实际(符合实际就是要符合规范))
规范先不说,先给大家创建个个类(老师类)
一般我们都是一个文件对应一个类(特殊情况除外,别抬杠)
老师类(Teacher.java):
public class Teacher{
String name;//姓名
int age;//年龄
float salary;//工资
String rank;//职称
//提交分数方法
public void alterPoint(){
System.out.println("提交分数");
}
//获得教师工资
public float getSalary(){
return salary;
}
}
类实质上就像个模板,根据这个类来创建一个个具体的老师。而创建的老师,我们就叫做这个类的对象
上面提到,创建的老师,来举几个具体的例子
一个个具体的老师,就叫一个个老师类的对象。
有时我们经常听到一个词叫做实例。现在说有点早。记住一个关系就行(对象包含实例)
//测试类
public class Test{
public static void main(String[] args){
Teacher Zhang = new Teacher();//创建一个张老师对象
Teacher Wang = new Teacher();//创建一个王老师对象
}
}
从上面这个例子看出:(如何创建对象呢)类名 对象名 = new 类名()
一个老师,有姓名、年龄、工资、职称这些我们需要知道的信息。这些信息就叫做类的属性。
属性的类型,可以是
这时候有的同学想问了,卧槽基本类型我在学C的时候学过,这类类型是什么东西??
保留疑问继续看。
一个老师可以做很多事情,老师这个角色在项目里能做的事情,我们就可以把他称为方法。
比如老师可以提交分数:
//直接写方法了
访问控制符 返回值 方法名([参数1],[参数2]....[参数n]){方法体}
(说实话,我一开始看这种结构的时候,超级迷。。我尼玛这都什么东西啊!)
后来才发现这种是最快帮你理解的结构
以上两个解决了,你直接结合上面的例子看就非常容易了。
那方法和属性是如何使用的呢.。我们基于上述Teacher类来说明
//测试类
public class Test1{
public static void main(){
Teacher zheng = new Teacher();
//属性赋值第一种方法:对象名.属性名;
zheng.name = "郑X";
zheng.age = 39;
//方法的使用:对象名.方法名();
zheng.alterPoint();
}
}
属性赋值方式先介绍第一种,后面两种提一嘴
首先什么是变量?
变量的定义:用来命名一个数据的标识符。
继续举栗子int year = 2020;
int:数据类型,表示整数
year:它首先是一个标识符
”=“:赋值操作符
2020:数字类型的值。(这再不理解我就要祖安喷子了!)
那什么又是变量的类型呢?
变量的类型决定了该变量可以包含什么样的值。
变量有8种基本类型。((⊙o⊙)?那你TM写四种)
有的同学看着看着产生了两个Question:
大家在创建对象的时候,还记得创建对象的格式吗?
我们在创建对象时会用到new关键字,但是给一个基本类型变量赋值却不用new。
因此,我们把给基本类型变量赋值的方法叫做字面值。
不同类型之间的变量可以相互转换。(用屁股想也知道,肯定不能随便换)
下面介绍一下转换的规则
还记得上节说的基本类型的长度吗?
把各种类型想象成杯子(抽象大法好!!,过段时间给大家介绍下抽象大法),长度呢就像杯子的容量
转换呢,就是将杯子里的水倒向另外一个类型的杯子,然后我们引出的是转换的类型,即如何转换:
我们把上述第1种情况,直接叫做自动转换。我们继续来举个例子。
public class Test2{
public static void main(String[] args){
long l;
int i = 50;
//比较杯子容量,long(64)>int(32),所以可以直接往long里面倒int,即:
l = i ;
}
}
上述第2种情况呢?就是我们要往空的小杯子里面,倒大杯子里面的水。就是明明知道,会造成水的溢出。但是我还是要强行的往里倒。
(蹭蹭,不行,硬上呗,咳咳,硬倒、硬倒)
继续举栗子 (你一定又会产生两个疑问,当你解决这两个问题后,你就又懂了!)
存放标识符 =(目的变量类型) 被转变量类型;
Integer.toBinaryString(变量名)
,直接放到打印里即可。public class Test3{
public static void main(String[] args){
byte b = 5;
int i1 = 10;
int i2 = 300;
b = (byte) i1;
System.out.println(b);
b = (byte) i2;
System.out.println(b);
System.out.println(Integer.toBinaryString(i2));
}
}
通过栗子来说明变量的作用域
总共有三种情况,都会在下述代码的注释中表现出来。
public class ZuoYongYu{
//这是第一种——成员变量
int i = 1;
int j = 1;
int k;
public void method1(){
//这是第二种——局部变量
int m = 0;
}
//这是第三种——参数
public void method2(int x){
k = i + j;
System.out.println(k);
}
}
变量类型:
很多人在开发的时候。他设置的,各种类型的变量。很有可能是一样的。就比如成员变量设置有一个设为 i ,局部变量它设为 i ,它参数还是设为 i 。你要把它们分清,并了解他们的优先级,自己尝试一下吧!
final这个关键字,加在声明变量前就说明,该变量只能声明一次final int i = 5;
以分号结尾的一段代码,就是一句表达式。
+、 -、 *、 /、 %、++、 --
//加、减、乘、除、余、自增、自减
> //大于
>= //大于或等于
< //小于
<= //小于或等于
== //是否相等
!= //是否不等
& && //长路与 短路与(都为真时,才为真;任意为假就为假)
| || //长路或 短路或(都为假时,才为假;任意为真就为真)
//长短区别(长:无论结果两边都被运算.)(短:第一个确定结果了,后面就不算了.)
! //取反(真变假,假变真)
^ //异或(不同返回真,相同返回假)
位运算是对于二进制而言的。所以你要进行位运算时,需要将你的数转换为二进制。送你一个简便的函数Integer.toBinaryString(),直接可以得到想要的二进制。
| //(位或)对操作数每一位进行或运算 e.g. 5:101 、 6:110 5|6=111=7
& //(位与)对操作数每一位进行与运算 e.g.5&6=100=4
^ //(异或)对操作数每一位进行异或运算 e.g. 5^6=011=3
~ //(取非)对操作数每一位进行取非 e.g. ~5=11111010=-6
<< //(左移):二进制每一位向左移动,最后一位补0
>> //(右移):二进制每一位向右移动
>>> //右移带符号:相当于加个绝对值
+= //i+=2 ===> i=i+2
-=//以下同理
*=
/=
%=
&=
|=
^=
<<=
>>=
>>>=
import java.util.Scanner;
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) {
//创建Scanner对象。
//s.nextInt()是Scanner类的一个方法,实现向控制台输出int型
//同理可得
Scanner s = new Scanner(System.in);
int a = s.nextInt();
String b = s.nextLine();
float c = s.nextFloat();
String b = s.nextLine();
/*tip:如果在通过nextInt()读取了整数后,
再接着读取字符串,
读出来的是回车换行:"\r\n",
因为nextInt仅仅读取数字信息,
而不会读取回车换行"\r\n".
所以,如果在业务上需要读取了整数后,
接着读取字符串,那么就应该连续执行两次nextLine(),
第一次是取走回车换行,第二次才是读取真正的字符串*/
//就记住用两次就完事了
}
}
为JDBC做铺垫
当我们在使用JDBC之前。我们首先要准备MySQL。
MySQL-Server
安装方式(提示性):Complete—>Standard Configuration—>设置密码(admin好记)—>安装(四项全对就行)
服务器:MySQL-Server 5.5安装包【6vbm】
安装错误:ConnectionError解决方案
##一.创建
##创建数据库
create database hd;
##创建用户表
Create table examstudent(
Flowid int,
Type int,
Examcard varchar(15),
Studentcard varchar(18),
Studentname varchar(20),
Location varchar(20),
Grade int,
primary key(Studentcard)
)Default charset = utf8;
##二.增数据
##插入数据
insert into examstudent values
(1,4,'000000000000000001','1170131101','周元','哈尔滨','85'),
(2,null,'000000000000000002','1170131102','翟纪元','哈尔滨','56'),
(3,4,'000000000000000003','1170131103','郭宇航','哈尔滨','72'),
(4,null,'000000000000000004','1170131104','付志强','齐齐哈尔','95'),
(5,null,'000000000000000005','1170131105','赵立伟','哈尔滨','64'),
(6,null,'000000000000000006','1170131106','王国涛','哈尔滨','60');
##三.查数据
##查询所有
select * from examstudent;
##统计有多少数据
select count(*) as '数据量' from examstudent;
##分页查询
select * from examstudent limit 0,3;
##四.改数据
##修改学生成绩
update examstudent set Grade = 65 where(Studentcard = '1170131106');
##五.删数据
##删除学生数据
delete from examstudent where(Flowid = 6);
(逐层递进,要想快速使用看最后那个即可)
访问数据库需要用到一个第三方的类,这些第三方的类都被压缩在一个叫jar的文件。我们一般称为jar包。
通常项目所用到的jar包。我们都会放到项目的lib文件夹下
mysql-jdbc的jar包下载:【7bze】
在Eclipse里导入这个jar包: 右键project->property->java build path->libaries->add external jars
(就相当于你打开此电脑,找到你的项目地址,在项目下创建个文件夹lib,把jar包放进去。再到Eclipse里面导入。
首先,第一步我们需要将 驱动类(com.mysql.jdbc.Driver)初始化。这个驱动类就在我们之前的那个jar包中。
那怎么初始化呢?我们需要借助 Class.forName(驱动类);
(实质:Class.forName把这个类加载到JVM中,加载的时候,就会执行静态初始化块,完成驱动的初始化相关工作。)
package jdbc;
//初始化驱动
public class ReJDBC {
public static void main(String[] args) {
//初始化驱动
try{
Class.forName("com.mysql.jdbc.Driver");
System.out.println("数据库驱动加载成功!");
} catch (ClassNotFoundException e){
e.printStackTrace();
}
}
}
需要建立与数据库的Connection连接。
我们在建立连接(使用getConnection)时需要提供:
即:(”jdbc:mysql://127.0.0.1:3306/hd?characterEncoding=UTF-8“,“root”,“admin”)
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
//建立与数据库连接
public class ConnectJDBC {
public static void main(String[] args) {
try{
//创建连接
Class.forName("com.mysql.jdbc.Driver");
System.out.println("数据库驱动加载成功!");
//提供数据库的所处地址(127.0.0.1)、数据库端口(3306)、数据库名、编码方式(UTF-8)、账号密码(root/*****)
Connection con1 = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/hd?characterEncoding=UTF-8","root","admin");
System.out.println("连接成功,获取连接对象: "+con1);
} catch(ClassNotFoundException e){
e.printStackTrace();
} catch(SQLException e){
e.printStackTrace();
}
}
}
(同学们到这,会发现,好像在上一步的基础上,然后我们继续做下一步。对的,我们可以一步创建一个class从头再敲一遍,来熟悉这些代码。)
Statement是用于执行SQL语句的。即我想要执行SQL,我需要先创建个Statement对象。
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
//Statement用于执行SQL语句
public class StatementJDBC {
public static void main(String[] args) {
try{
//初始化驱动
Class.forName("com.mysql.jdbc.Driver");
System.out.println("数据库驱动加载成功");
//创建连接
Connection con2 = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/hd?charactEncoding=UTF-8","root","admin");
System.out.println("数据库连接成功,获取连接对象:"+con2);
//Statements对象
Statement sta1 = con2.createStatement();
System.out.println("获取Statement对象:"+sta1);
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}
}
}
我们将数据库操作拆分为几步,我刚开始学的时候,WDNM这么长一串,老师说:懂不懂无所谓,照着打就行。
后来自己看的时候,将它分为五步即可
执行SQL的这步,用sta.execute.
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class DoSQLJDBC {
public static void main(String[] args) {
try {
//一.加载驱动
Class.forName("com.mysql.jdbc.Driver");
System.out.println("数据库驱动加载成功");
//二.创建连接
Connection con3 = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/hd?characterEncoding=UTF-8","root","admin");
System.out.println("成功连接数据库,获取连接对象对象为:"+con3);
//三.获得Statement对象
Statement sta2 = con3.createStatement();
System.out.println("成功获取statement,对象为:"+sta2);
//四.通过statement对象,用execute。执行SQL
String sql = "insert into examstudent values(6 , null , '000000000000000006' , '1170131106' , '王国涛' , '哈尔滨' , 66 );";
sta2.execute(sql);
System.out.println("插入成功!");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e){
e.printStackTrace();
}
}
}
tip:要注意数据库的连接是有限的资源,相关操作结束后,我们需要养成关闭数据库的好习惯
关闭顺序:
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class AllTestJDBC {
public static void main(String[] args) {
//提前创建好connection和statement以便判断以关闭
Statement sta3 = null;
Connection con4 = null;
//连接数据
final String hd_name = "root";
final String hd_password = "admin";
final String hd_adress = "jdbc:mysql://127.0.0.1:3306/hd?characterEncoding=UTF-8";
try{
//一.加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
System.out.println("数据库驱动加载成功");
//二.创建连接
con4 = DriverManager.getConnection(hd_adress,hd_name,hd_password);
System.out.println("成功连接数据库,获取连接对象对象为:"+con4);
//三.创建statement
sta3 = con4.createStatement();
System.out.println("成功创建statement对象:"+sta3);
//四.执行SQL语句
String sql = "insert into examstudent values(9,4,'000000000000000009','1170131109','李彤','齐齐哈尔',80);";
sta3.execute(sql);
System.out.println(sql.substring(0,6)+"成功");
} catch(ClassNotFoundException e){
e.printStackTrace();
} catch(SQLException e){
e.printStackTrace();
}
finally{
//五.关闭数据库
if( sta3 != null)
try{
sta3.close();
System.out.println(sta3+":成功关闭");
} catch (SQLException e){
e.printStackTrace();
}
if( con4 != null)
try{
con4.close();
System.out.println(con4+":成功关闭");
}catch(SQLException e){
e.printStackTrace();
}
}
}
}
CRDU是数据库基本操作:
增删改我们放在一起讲,为什么呢,不告诉你,往下看。嘿嘿(●ˇ∀ˇ●)
在上一节的内容(2.1.2.1.5)里我们已经用了