JAVA学习笔记

2022.12.22

Java发展史

时间:1995

创始人:詹姆斯·高斯林

公司:Sun

08年甲骨文公司(oracle)收购了Sun

Java特性

1、简单性

2、高安全性

3、可跨平台:只写一套Java代码,各个平台都可以用

4、可移植性

5、健壮性:不容易出bug

Java的组成部分

Java se java语法

Java ee java web端应用 网页

Java me 手机相关的开发,但是因为市场主要是Android和IOS,所以me逐渐被合并到ee里面

Java的编译与运行机制

JDK是开发工具包

JRE属于运行环境

JVM运行Java的虚拟机,才能提供Java运行

源文件--》编译器--》字节码文件(xx.class)--》解释器--》输出

Java语言

编译语言:写完的源代码不能直接执行,需要进行编译成字节码文件才可以运行

脚本语言:写完了之后就能立刻运行的语言

Java是编译的高级语言,是一门需要编译后才可以运行的语言,用编辑器进行Java代码的书写,使用idea进行开发

使用Java

JDK 就是Java开发需要的工具,所有工具都在里面

JDK通常使用稳定版本

第一个Java语言,必须使用英文符号

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

创建Java文件

工作空间 --》项目 --》包 --》Java文件

主方法

所有Java的程序必须写在这对大括号里面才能执行

public static void main(String[] args) {  
​
}

查看源代码位置

右键类名 --》打开于 --》Explorer


2022.12.23

Java的语法

1、基本元素:

1)标识符:类名、变量名、常量名、方法名

2)关键字:属于Java官方已经用掉的单词

3)常量:声明后不再变化的量

4)注释:1.标注代码含义,2.让代码不再运行

方式一:
//声明一个变量(一般用于单行)
方式二:
/*声明一个变量(一般用于多行)*/
方式三:
/** 
*  文档注释
*/

2、数据类型:

不同类型的数据能做的事情不一定相同,基于这个情况,人们总结了多种数据类型。

数据类型分为两大类

1)基本数据类型:Java官方直接提供的确定的数据类型,共8种

boolean、char、byte、short、int、long、float、double

2)复合数据类型

3、运算符

4、表达式

变量的命名规则

一个标识符可以是大写或者小写字母、数字、下划线、美元符号的任意顺序组合,注意不能有空格、@、#、等特殊符号。否则容易与数字、常量相混淆。Java区分字母大小写。

声明一个变量,结构为:数据类型 变量名 = 变量值。

变量命名规范:语义化,即见名知意

例:学生信息表:stuInfoTable --- 驼峰式命名法

    String str = "Hello World";

声明完成变量之后,直接写方法名既能掉用。使用过的变量名不能重复使用,需要重新命名。

规则:必须遵守的,不遵守就会报错

规范:合法但有毛病的语句

八大基本数据类型

一、特殊类型2种:

布尔类型boolean:只有两个值true 和false

boolean b1 = true;
boolean b2 = false;

字符类型char :只能有一个内容,不能有多个,多个就会报错,但是纯数字不加单引号则可以

char c1 = 'A';
char c2 = '1';
char c3 = '你';
char c4 = '?';
char c5 = 100;

二、整数类型4种:都是存储整数,但是所占位数不一样

字节型byte:

byte by1 = 127;

短整型short:

short s1 = 32767;

整型int:

int num = 2147483647;

长整型long:比较特殊,如果末尾不加L,默认为int类型。一般建议写大写的L,方便辨识。

long l1 = 2147483648L;

三、浮点(小数)类型的2种:Java程序中直接写出的小数数据叫做直接量,默认为double类型

浮点型float:,float后缀要加f或F

float f1 = 12.5f;
float f2 = 12.5F

双精度浮点型double:

double d1 = 12.5;

数据类型转换

1、数据类型的自动转换,位数少的可以自动转换成位数长的。

//自动数据类型转换
byte by2 = 100;
short sh1 = 1000;
//让两个数字相加,并且给的给过是一个变量名
int an = by2 + sh1;

2、数据类型的强制转换:只有强制转换才能将位数长的变成位数短的

语法:目标类型 变量名 = (目标类型)原类型变量名

//强制类型转换    在等号的右边加上(),括号内填写需要转换的类型
int numm = 128;
byte by3 = (byte) numm;

1)强制转换过程中,数据可能导致溢出或损失精度。

2)浮点数到整数的转换是通过舍弃小数得到,不是四舍五入

(int)23.7 结果为 23        (int)-45.89f 结果为 -45

2022.12.28

运算符

算数运算符:+(加),-(减),*(乘),/(除),%(取余),++(自增1),--(自减1)

//算数运算符
int num = 10;
int num2 = num++;    //先赋值,在自增
int num3 = ++num;    //先自增,在赋值,此时的num在int2中已自增,值为11
System.out.println(num2);
//输出结果为10
System.out.println(num3);
//输出结果为12

比较运算符:>(大于),<(小于),>=(大于等于),<=(小于等于),==(判断等于),!=(不等于)

//比较运算符
System.out.println(5 > 4);   //true
System.out.println(3 < 5);   //true
System.out.println(6 >= 5);   //true
System.out.println(4 <= 4);   //true
System.out.println(10 == 10);   //true
System.out.println(7 != 10);   //true

逻辑运算符:&(且),|(或),!(非)

//逻辑运算符
System.out.println((10 > 7) & (4 < 6));    //且:要求是多个条件都满足才为true
System.out.println((10 > 7) | (8 < 6));    //或:要求多个条件中只要有一个满足就为true
System.out.println(!(4 < 6));              //求反

位运算符:仅做了解(相对用的少),核心是将数字变为二进制之后按照二进制的每一位进行对比

例子:&意思是两个二进制位都是1结果就是1,反之为0

//位运算符
System.out.println(7 & 9); //1 

赋值运算符:=(等),+=(加等),-=(减等),*=(乘等),/=(除等)

//赋值运算符
int a = 100;
System.out.println(a);
a += 10;    //100+10=110
System.out.println(a);
a *= 2;     //110*2=220
System.out.println(a);
a /= 10;    //220/10=22
System.out.println(a);

条件运算符: (......) ?(.......) :(......)(也称三目运算符)

//三目运算符
int san = 4 > 6 ? 100 : 200;    //条件成立则等于冒号前的值,不成立则为冒号后的值
System.out.println(san);   //200

复合数据类型

首字母一般大写

字符串:String 使用双引号 并且 可以有多个,字符串碰到"+"号会变成拼接

"+":如果遇到了字符串,则"+"就是拼接,如果没有遇到字符串,那么就是求和

//字符串
String str = "hello world";
System.out.println(str);              //hello world
System.out.println(str + 10 + 20);    //hello world1020
System.out.println(10 + 20 + str);    //30hello world

表达式:运算符和操作数的序列

Scanner 用于输入的工具

Java代码的基础运行流程

所有Java代码的基础运行流程是从上往下,同一行中从左往右,并且只运行一次

有时候就需要流程控制语句来修改这个流程

1、分支语句

(1)if(条件){

//当条件成立时执行的代码;

}

//if语句
if(5 > 4){
    System.out.println("12345");
}

(2)if(条件:布尔值或结果为布尔值的表达式){

//当条件成立时执行的代码;

} else{

//当条件不成立时执行的代码;

}

//if()...else 语句
int num1 = 5;
if (num1 > 8){
    System.out.println("num1 > 8");
} else {
    System.out.println("num1 < 8");
}

(3)if(条件1){

//当条件1成立时执行的代码

} else if(条件2){

//当条件2成立时执行的代码

} else if(条件3){

//当条件3成立时执行的语句

}

//if()...else if()...语句
System.out.println("请输入一个正整数");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
if (num > 0 & num % 3 == 0 & num % 4 == 0) {
      System.out.println("这个数既是3的倍数又是4的倍数");
} else if(num > 0 & num % 3 == 0){
    System.out.println("这个数是3的倍数");
} else if (num > 0 & num % 4 == 0){
    System.out.println("这个数是4的倍数");
} else {
    System.out.println("这个数既不是3的倍数,也不是4的倍数");
}


2022.12.29

分支语句

(4) switch...case...语句:本质就是把小括号里面的变量拿出来比较

switch(需要对比的变量){

case 值1:

//当变量等于该值的时候执行的代码

break;

case 值2:

//当变量等于该值的时候执行的代码

break;

......

default: //类似于最后的else

break;

}

System.out.println("请输入一个数字");
Scanner sc = new Scanner(System.in);
int num  = sc.nextInt();
switch (num){
    case 1:
        System.out.println("今天吃麦当劳");
        break;
    case 2:
        System.out.println("今天吃华莱士");
        break;
    case 3:
        System.out.println("今天吃必胜客");
        break;
    case 4:
        System.out.println("今天吃肯德基");
        break;
    case 5:
        System.out.println("今天吃汉堡王");
        break;
    case 6:
        System.out.println("今天吃德克士");
        break;
    case 7:
        System.out.println("今天吃海底捞");
        break;
    default:
        System.out.println("输入有误,请重新输入");
        break;
}

问题1:break可以去掉吗?

可以去掉,去掉之后语句会贯穿,执行到下一个break

问题2:default写在前面会怎样?

default写在哪里都不会有影响

循环语句

有时代码会重复多次造成冗余,就是冗长的,多余的

目的1:写的内容比别人少

目的2:方便调试或修改代码

1、for循环语句

for (初始化变量;范围判断;增量){ 小括号里面也是写条件,不过for的条件有3个,条件间用分号;隔开

// 循环体,就是循环运行过程中执行的代码

}

//打印10次Hello World
for (int i = 0; i < 10; i++) {
    System.out.println("Hello World!");
}

2022.12.30

循环语句

1、for

for(条件){

//语句

}

//for循环
for (int i = 1; i <= 10; i++) {
    System.out.println(i);
}

2、while (当...的时候)

while(布尔表达式){

语句集;

}

//while循环
int j = 1;
while (j<=10){
    System.out.println(j);
    j++;
}

3、do...while

do

{

语句

}while(条件:布尔表达式);

//do...while
int k = 1;
do {
    System.out.println(k);
    k++;
} while (k <= 10);

do...while 属于后置判断循环,for和while属于前置判断循环

do...while 至少执行一次

while属于不确定次数的循环,for属于确定次数的循环

break和continue

break:终止循环

continue:结束本次循环并进行下一次循环

随机数

随机数Random也和Scanner一样,是Java定义的

Random random = new Random();
int computer = random.nextInt(3);    //随机生成0、1、2中的一个随机数

获取随机数字 直接获取 所有int中的 随机数

在nextInt的括号里面 可以指定随机范围 必须是大于0的正整数


2022.12.31

双重for循环

System.out.println();  //输出并换行
System.out.print();  //输出但不换行

数组

数组是数据的集合,并且在Java中可以实现一个变量名承载多个数值,数组的使用分为声明和调用,数组的长度是固定的,数组的英文叫array

数组的声明:

1、静态声明

//静态数组的声明
String str[] = {"张三","李四","王五"};

2、动态声明

//动态数组声明
int numAry[] = new int[5];   
//中括号内写数组长度
//如果不提供内容,那么int型默认为0。String 默认为null(指什么也没有,什么都不是)
for (int i = 0; i < numAry.length; i++) {
    System.out.println(numAry[i]);
}  

数组的调用:

数组获取里面的内容靠编号,专业称呼被称为下标,数组的下标从0开始,最大到数组长度-1。数组长度可以写成:数组名.length

for (int i = 0; i < strAry.length; i++) {
    System.out.println(strAry[i]);
}

数组中可以存放数组吗?

可以。数组中存放数组称为多维数组


2023.1.1

多维数组

String stu1[] = {"001","张三","男","JX2212"};
String stu2[] = {"002","李四","女","JX2212"};
String stu3[] = {"003","王五","男","JX2212"};
//几维数组就有几个中括号
String allStu[][] = {stu1,stu2,stu3};//二维数组
System.out.println(allStu); //如果直接查看二维数组,会发现最前面有两个中括号
System.out.println(allStu[0]);//二维数组指代一个下标出来的是一维数组
System.out.println(allStu[0][1]); //二维数组需要两个下标才能取到内容。第一个下标:行数(Y轴),第二个下标:列数(X轴)

打地鼠二维数组版本

实现步骤:

1、初始化地图

//1、初始化地图
String map[][] = new String[5][5];
for (int i = 0; i < map.length; i++) {
    for (int j = 0; j < map[i].length; j++) {
        map[i][j] = "o";
    }
}

2、放置老鼠

//2、放置老鼠
Random ran = new Random();
int mouseX = ran.nextInt(5);
int mouseY = ran.nextInt(5);
map[mouseY][mouseX] = "X";

3、绘制地图

//3、绘制地图
System.out.println("⭐⭐⭐游戏地图⭐⭐⭐");
for (int i = 0; i < map.length; i++) {
    for (int j = 0; j < map[i].length; j++) {
​​​​​​​           System.out.print(map[i][j] + "  ");
    }
    System.out.println();
}
System.out.println("老鼠的横坐标:" + mouseX + ",纵坐标:" + mouseY);

4、开始输入坐标,打地鼠

//4、输入打击的坐标
Scanner sc = new Scanner(System.in);
System.out.println("请输入打击的横坐标");
int userX = sc.nextInt();
System.out.println("请输入打击的纵坐标");
int userY = sc.nextInt();

5、判断是否命中

//5、判断是否命中
if (map[userY][userX] == "X") {
        System.out.println("恭喜你,打中了");
} else {
        System.out.println("很遗憾,没打中");
​​​​​​​}

6、判断是否继续

//判断是否继续
System.out.println("是否继续游戏?输入Y继续,N退出");
String again = sc.next();
if (again.equals("Y")) {
    System.out.println("继续游戏");
} else if (again.equals("N")){
    System.out.println("结束游戏");
    break;
}

==本质上比较的是内存地址,内存地址相同,结果为true,反之,地址不同,结果就为false

内容比较用equals

函数

具备特定功能的,高度封装的,代码块


2023.1.3

函数

使用函数是为了减少代码的冗余

具备特定功能的高度封装的代码块

封装:省略技术细节,只提供使用方法

函数的分类

1、内置函数:Java内部自带的函数,例如:System.out.println( )

2、自定义函数:用户自己写好的函数

函数的使用

1、函数的声明:方法5要素

函数中不能嵌套函数

1)修饰符:public static

public意为共有的,公共的。static意为静态的

2)返回值类型:void 意为没有返回值

3)方法名/函数名:标识符命名规则

4)参数列表:中括号里的

5)方法体:大括号即可{}

//在主方法之外,进行函数的声明
public static void myFn(){    //Fn的意思是函数
    System.out.println("函数执行了");
}

2、函数的调用

函数名+()

public static void main(String[] args) {
    myFn();
}

封装函数的思路

把需要重复执行的代码放入函数中即可

函数的参数

参数就是将冗余代码中不同的地方提取出来

参数分为

1:形参 形式参数 只是占位子,没有实际含义的参数,用在函数的声明过程

public static void myFn(int x){     //这里的x就是形参    
    int sum = 0;    
    for (int i = 0; i <= x; i++) {        
        sum += i;
    }    
    System.out.println("1-" + x + "的和等于:" + sum);
​​​​​​​}

2:实参 实际参数 具备实际意义的,有内容的参数,用在函数的调用过程中

public static void main(String[] args) {
    myFn(50);                //括号里的就是实参
    myFn(100);
    myFn(200);
}

参数可以写多个,多个参数之间使用逗号‘,’分割

形参的顺序需要和实参的一致

函数的返回值

变量作用域 即 函数内的变量,他不能被拿到函数外面使用

如果需要将局部变量拿到外面就需要返回值return

public static int myFn(int min , int max){  //因为sum是int型,所以返回值用int。
    int sum = 0;
    for (int i = min ; i <= max; i++) {
        sum += i;
    }
    System.out.println(min + "-" + max + "的和等于:" + sum);
    return sum;  //将sum  return出去
}
​
public static void main(String[] args) {
    int abc = myFn(0,50);      //使用abc去接收函数return出来的sum
    System.out.println("外部使用sum等于:" + abc);
}

return的作用

1、将函数内的变量拿出

2、终止函数


2023.1.4

面向对象

什么是对象?

世间万物皆对象 世界上所有看得见摸得着的都是对象

对象里有什么

特征---在面向对象中叫:属性

能做的事---在面向对象中叫:方法

将多个对象共同的属性和方法抽取出来,形成类

类相当于模板 相当于设计图 是不能直接做事情的

Java就是面向对象的编程语言

Java的基本单元就是类,即class,同时class也是数据类型

Java中要使用对象,需要先写好类,从类里面实例化对象

类和对象的区别

类是Java的核心和本质。它是Java语言的基础,因为类定义了对象的本质。 类定义了一种新的数据类型,可以用新类型来创建该类型的对象 类(class)是对象(object)的模板,而对象(object)是类的一个实例(instance).

面向对象和面向过程

比较下来,面向对象可以优化冗余代码,以及模拟现实生活

面向对象还有好处,面向对象具备三大特性:封装、继承、多态

public class Dog {
    /**
     * 1、小狗
     * 属性:颜色、品种、年龄、姓名、性别
     * 方法:跑、跳、吃饭
     */
    public String colour = "黄色";
    public String variety = "中华田园犬";
    public int age = 2;
    public String name = "小汪";
    public String sex = "公";
    public void run(){
        System.out.println(name + "在跑");
    }
    public void jump(){
        System.out.println(variety + name + "在跳");
    }
    public void eat(){
        System.out.println(colour + variety + name + "在喝酸奶");
    }
}
public class DogTest {
    public static void main(String[] args) {
        Dog dog = new Dog();
        System.out.println(dog.colour);
        System.out.println(dog.variety);
        System.out.println(dog.age);
        System.out.println(dog.name);
        System.out.println(dog.sex);
        dog.run();
        dog.jump();
        dog.eat();
    }
}

运行结果:

​​​​​​​


2023.1.5

面向对象三大特性

1、封装

2、继承

3、多态

封装

面向对象的封装

属性应该是不能被随意修改的,所以我们要使用封装,封装好属性

public class Cat {
    public String catName = "咪咪";
    private int catAge = 2;
    public String catColor = "橘色";
    public void showMyself(){
        System.out.println("喵~,我叫:" + catName + " ,我今年" + catAge + "岁,颜色是:" + catColor);
    }
    //修改私有的方法是使用set
    public void setCatAge(int catAge) {  //修改的方法
        if (catAge >= 0 && catAge <= 10){
            this.catAge = catAge;     //this的意思类似于中文的我自己,指对象本身
        }
    }
    //获取私有的方法是使用get
    public int getCatAge() {    //获取的方法
        return catAge;
    }
}
public class TestCat {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.catName = "花花";   //修改完属性之后,该对象的属性就发生了改变
        cat.setCatAge(8);
        System.out.println(cat.getCatAge());
        cat.showMyself();
    }
}

修饰符

用于修饰某个属性或方法的可用性

public 公共的,即所有类都可以随意使用

private 私有的,即能且只能在本类中使用。私有化不是为了完全不用,而是有条件的使用,所以要重写方法

私有化属性,并提供共有的访问方法


2023.1.28

StringBuffer:是一个线程安全的可变字符序列

StringBuilder:

基本数据类型没有属性和方法

但是万一需要给基本数据类型用上方法咋办呢?

使用封装类

8个基本数据类型的封装类

boolean--->Boolean

char--->Character

byte--->Byte

short--->Short

int--->Integer

long--->Long

float--->Float

double--->Double

异常

原本正常的情况,但是遇到意外导致了程序中断

异常如何解决?

try...catch finally throw throws 这几个关键字来解决

1、try...catch 使用 try catch 最关键的地方是 是让程序遇到了异常 能继续运行

//try...catch
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入一个数字");
    try {    //大括号里面写可能出问题的代码
        double scNum = sc.nextInt();
        double num = 10/scNum;
        System.out.println(num);
    } catch (InputMismatchException e){
    //e就是异常对象,
    //中括号里面写异常类型,
    //大括号里面写对应异常发生之后需要执行的代码
        System.out.println("出错了,请输入数字");
    } catch (ArithmeticException e){   //catch可以嵌套使用
        System.out.println("请不要输入‘0’");
    } catch (Exception e){
    //Exception属于所有异常的总父类,
    //InputMismatchException-->输入异常,具体的异常类
        System.out.println("出现未知异常,请联系管理员");
    }
    System.out.println("程序运行结束");

异常和错误的区别:异常在正常情况下可以运行,但是 错误属于100%错误

断点调试

相当于 让程序运行到指定的位置的时候 暂停下来


2023.1.29

为了开始做账号的登录注册功能,

准备先使用数据库来进行功能的实现

数据库

数据库管理系统

关系型数据库:一个软件中含有若干个库,一个库中含有若干个表,一个表中含有若干条信息,一条信息种含有若干个字段

比较有名的关系型数据库:Mysql Oracle sqlite ...

Mysql

mysql可以使用命令行

mysql基本语法:增删改查

增删改查

使用软件工具(可视化工具)来进行操作

连接步骤:

1)IP:网络地址 localhost 或 127.0.0.1代表本地(本台电脑)

2)端口:每个软件都有一个自己专有的端口 3306是MySQL的默认端口

3)账号密码 正常输入

4)确认信息后即可连接,完成连接后就可以脸上数据库

完整添加:即表里面有几个字段values里面必须写几个

insert into 表名 values(信息一,信息二,信息三...);

insert into student values(6,'600','白骨精','女',100,'西游班');

指定添加

insert into 表名(字段名一,字段名二,字段名三...) values(信息一,信息二,信息三...);

insert into student (stuName,stuSex,stuAge) values ('孙二娘','女',33,);

整体删除

delete from 表名-----》该语句是删除表内所有信息(慎用)

指定删除

delete from 表名 where 条件

delete from student where stuAge = 33;

整体修改

update 表名 set 字段名 = 值-----》整个表全改

指定修改

update 表名 set 字段名=值 where 条件 符合条件的 即可修改

update student set stuAge = 10000 where stuAge = 100

select 字段 from 表----->查询对应表中的某些字段信息 select * from 表名 查询表中的所有信息

select stuName,stuAge from student;

select 字段 from 表 where 条件 根据条件查询内容

where条件

查询年龄24-26之间的所有信息

select   *  from   stutable where   stuAge between  24 and 26

查询姓李的同学-----》模糊查询

select * from student where stuName like '李%';

desc 从大到小 asc从小到大

按照年龄从小到大排序

select * from student order by stuAge

按照年龄从大到小排序

select * from student order by stuAge desc;

​​​​​​​ ​​​​​​​


2023.1.30

MySQL

聚合函数

求和sum(),最大max(),最小min(),平均值avg()

-- 1:查询李四最好的成绩是几分 select max(score) from sc,student where sc.sno = student.sno and student.sname = '李四'

-- 2:查询张三最差的成绩是多少 select min(score) from sc,student where sc.sno = student.sno and student.sname = '张三'

-- 3:查询年龄最大的同学是几岁 select max(sage) from student

-- 4:查询男生的平均年龄是多少 select avg(sage) from student where ssex = '男'

-- 5:查询002课程的平均分 select avg(score) from sc where cno = 'c002'

分组

group by

-- 6:查询每一位有成绩记录的同学的平均分是多少

select sno,avg(score) from sc group by sno

多表查询

子查询 同时写 多个select 环过 除了第一个select之外 其他的 select 放在 括号里面 查询多个信息要用in

JDBC

Java语言编写的 用于 访问数库的规范 JDBC提供Java访问数据库的 规范/接口具体的访问实现 就交给 名个数据库厂商 进行实现

JDBC连接数据库的七大步骤

由鼠标连接电脑做示范模拟JDBC连接数据库

1、鼠标插入电脑-----》先将驱动程序下载到程序中(将jar包导入项目中)

2、电脑安装鼠标驱动-----》程序先安装驱动

3、测试是否能够建立连接-----》Connection conn = DriverManager.getConnection(ur1,"root","root");

4、思考要用鼠标干嘛-----》写SQL语句

5、准备开始动手做事情-----》创建一个执行者对象

6、做事情并获取结果-----》执行者对象执行SQL语句并获取结果

7、做完事情关掉电脑拔掉鼠标-----》关闭连接,释放资源

//需要抛出异常或者用try catch解决异常
//因为Java代码不清楚到底有没有引入驱动包
Driver myDriver = new Driver();
//加上?userSSL=false 就是不让连接使用SSL
Connection conn = DriverManager.getConnection(
    "jdbc:mysql://127.0.0.1:3306/jx2212",
    "root",
    "root");                                      //获得连接
    System.out.println(conn);
String sql = "delete from student where stuName = '吕布'";      //SQL语句 - 删
Statement stsm = conn.createStatement();                       //创建执行者对象
int ans = stsm.executeUpdate(sql);                             //执行SQL语句
System.out.println("执行SQL语句的结果是" + ans);
String sql = "insert into student values(2,'200','吕布','男',40,'三国班')";   //SQL语句 - 增
Statement stsm = conn.createStatement();                                    //创建执行者对象
int ans = stsm.executeUpdate(sql);                                          //执行SQL语句
System.out.println("执行SQL语句的结果是" + ans);
String sql = "update student set stuAge = 12345 where stuAge = 10000";      //SQL语句 - 改
Statement stsm = conn.createStatement();                                    //创建执行者对象
int ans = stsm.executeUpdate(sql);                                          //执行SQL语句
System.out.println("执行SQL语句的结果是" + ans);
String sql = "select * from student";                              //SQL语句 - 查
Statement stsm = conn.createStatement();                           //创建执行者对象
ResultSet rs = stsm.executeQuery(sql);                             //执行SQL语句
while (rs.next()) {       //判断有没有下一个内容
    System.out.println(rs.getString("stuName"));
}
//释放资源   规则:先开启的后关,后开启的先关
rs.close();
stsm.close();
conn.close();

2023.1.31

Java界面

浏览器                                 软件

Browser-server                   Client-server

Java 搭建一个client界面

使用Swing 技术来搭建

Swing就是一个Java内置的插件库

Swing的绝大多数代码(除了一个之外)都以J开头

分成三层结构:顶级容器--》中间容器--》组件

JFrame:顶级容器

public MyFirstJFrame(){
    setSize(600,400);      //设置大小    
    setLocationRelativeTo(null);            //设置居中
    setTitle("我的第一个界面");             //界面的标题    
    setDefaultCloseOperation(EXIT_ON_CLOSE);  //点X的时候,退出程序
    setResizable(false);                    //不允许调整大小
    
    //为了让中间容器加入顶级容器,就在顶级容器里面add中间容器
    MyFirstJPanel mypanel = new MyFirstJPanel();
    add(mypanel);    
    setVisible(true);                       //设置可见,一般放在最后面
}

JPanel:中间容器

public MyFirstJPanel() {
    setBackground(new Color(239, 115, 23));    //设置背景颜色,改变数值变颜色    
    setLayout(null);     //设置自由布局
    //直接放置组件
}

JButton:按钮

//第一个组件---按钮
JButton btn1 = new JButton("按钮");
btn1.setSize(60,35);         //设置大小
btn1.setLocation(100,100);           //设置位置
add(btn1);

JLable:文字或图标

//第二个组件---文字或图标
JLabel lb1 = new JLabel("今天天气很好");
lb1.setBounds(200,200,150,35);           //设置大小和位置,等同于setSize + setLocation
add(lb1);

JFextField:输入文本框

//第三个组件---文本输入框
JTextField field1 = new JFormattedTextField();
field1.setBounds(300,300,100,35);
add(field1);

2023.2.1

Swing的菜单

1)用于显示菜单的菜单栏

2)可以点击的菜单

3)点击后弹出来的 菜单项

4)二级菜单

菜单写在顶级容器(JFream)里面

只有JMenuBar的添加用的是setJMenuBar

myBar = new JMenuBar();    //这是菜单栏
​
menu1 = new JMenu("菜单1");            //这是菜单1
item1 = new JMenuItem("选项1");        //菜单项
menu1.add(item1);                     //菜单项加入菜单中
myBar.add(menu1);                     //餐单加入菜单栏中
​
menu4 = new JMenu("二级菜单");              //二级菜单
item2 = new JMenuItem("二级菜单项");        //二级菜单项
menu4.add(item2);                         //二级菜单项加入二级菜单
menu1.add(menu4);                         //二级菜单加入一级菜单
​
setJMenuBar(myBar);                 //绘制菜单栏

布局

Layout

在不设置布局的情况下,如果修改界面大小,相同的元素,可能排列方式不同,因为宽度变化了

自由布局

FlowLayout        流式布局      JPanel的默认布局

BorderLayout     边界布局       JFream的默认布局

GridLyout           网格布局

CardLayout        卡片布局

1、流式布局:组件并排排放放不下了就去下一行

setLayout(new FlowLayout(FlowLayout.RIGHT,10,20));   //流式布局的右对齐,先左右间隙,后上下

2、边界布局:根据上下左右中放置组件,如果在边界布局中直接 add, 默认会加在中间,所以add需要指定方位

边界布局里面的5个区域能且仅能放置一个组件

如果使用自由布局的ipanel 会导致 在边界布局中 不占据大小

所以此时 需要 自由布局的jpanel 主动提出 自己需要的大小,setPreferredSize(设置首选大小)

setLayout(new BorderLayout());   //边界布局
bt5 = new JButton("按钮5");
add(bt5);
​
RightJPanel rightJPanel = new RightJPanel();
add(rightJPanel,BorderLayout.EAST);

以左右样式为例,边界布局的右侧界面

setLayout(null);
setPreferredSize(new Dimension(200,0));  //因为处于右侧,高度固定占满,不用设置
JButton btn1 = new JButton("右侧按钮1");
btn1.setBounds(10,50,150,20);
add(btn1);

3、网格布局

按照格子的方式 排列组件

营数可以选择无参数 2个数 4个参数

参数的时候 参数分别代表 行数和列数优先满足行数

setLayout(new GridLayout(4,2));
//网格布局,参数分别代表行数和列数,优先满足行数,第一个数值指行,第二个数值指列
bt1 = new JButton("按钮1");
add(bt1);
bt2 = new JButton("按钮2");
add(bt2);
bt3 = new JButton("按钮3");
add(bt3);

Swing图片的显示

文件路径 不是用Java文件存图,而实引入图片,只需要写好图片引入的路径即可

在项目的src文件夹同级的位置放置素材

然后再JPanel里面进行图片的绘制

需要一个方法

//绘制图片
@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Image bgImg = new ImageIcon("images/5.jpg").getImage();
    g.drawImage(bgImg,0,0,600,500,null);
}

2023.2.2

字符集

通俗理解成一个可以在代码中存储并显示其他语言的字典

字符集乱码:不同的字符集中,相同的代码所代表的内容 不同 所以看上去是乱码 解决方案: 使用记事本来解决 记事本中另存为然后修改编码 即可恢复 gbk 就是 ansi

事件

用来让各个组件点击有反应

Java使用的事件是授权事件模型

事件的重点是

1)事件源:事件的源头,通常是组件

2)监听器:不断的监视事件源,直到事件源发生了什么,一般放在controller里面,可以运用接口 来实现 也可以 使用 抽象类的继承

//监听器-----鼠标监听
public class LogLis extends MouseAdapter {
    public Controller con;
    
    public LogLis(Controller con) {
        this.con = con;
    }
    @Override
    public void mouseClicked(MouseEvent e) {
        super.mouseClicked(e);
        try {
            con.login();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
//监听
LogToWelLis toWelLis = new LogToWelLis();       //先实例化监听器
cancel.addMouseListener(toWelLis);              //用组件(按钮).addMouseListener(监听器)

​​​​​​​

 

使用界面注册

即获取账号、密码、确认密码

String acc = UI.logFrame.logPanel.accInt.getText();     //Jpanel.组件.getText();

弹窗

JOptionPane.showMessageDialog(null, "登录成功", "提示信息",JOptionPane.INFORMATION_MESSAGE);

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值