java

1
目录:
1:jdbc操作(基本步骤)
2:File基本控制
3:jvm简述(大概)
4:类加载机制
5:错题笔记

1
jdbc

目标:创建一个以JDBC连接数据库的程序,在这里我用到了7个步骤:
1、加载JDBC驱动程序;
2、提供JDBC连接的URL;
3、创建数据库的连接;
4、创建一个Statement;
5、执行SQL语句;
6、处理结果;
7、关闭JDBC对象
1、加载驱动,
在mysql官网下载了一个数据库驱动,然后在eclipse中的build path添加驱动

加载驱动的程序,这里用Class中的forName实现
代码如下:
try{Class.forName("com.mysql.jdbc.Driver");}catch(Exception e){System.out.println("加载失败");}
2、提供url
连接URL定义了连接数据库时的协议、子协议、数据源标识
协议:以jdbc开始------jdbc
子协议:数据库管理系统的名称-----mysql
数据源标识:找到数据库来源的地址与连接端口----localhost:3306
例子:jdbc:mysql://localhost:3306
String uri = "jdbc:mysql://localhost:3306/students?useSSL=true"
3、创建数据库的连接
然后确定需要连接的数据库,以及提供连接数据库的用户和密码再用DriverManager.getConnection();进行连接,这里连接的是students数据库,用户是root,密码123456;
代码如下:
String uri = "jdbc:mysql://localhost:3306/students?useSSL=true";//要连接哪个数据库String user = "root"; //哪个用户去连接String password = "123456"; //用户密码//连接数据库try{con = DriverManager.getConnection(uri,user,password);}catch(SQLException e){System.out.println("链接失败");}
4、创建一个Statement
就是存放要执行的sql语句的一个对象
代码如下:
Statement sql;sql = con.createStatement();//sql用来存储将要执行的sql语句
5、执行sql语句,要用ResultSet这个类的对象来接收从数据库返回的数据
代码如下
ResultSet rs;rs = sql.executeQuery("SELECT * FROM mess");
6、处理结果
ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问,使用结果集(ResultSet)对象的访问方法获取数据,这里只是查看数据
代码如下,
while(rs.next()){System.out.printf("%s\t",rs.getString(1));System.out.printf("%s\t",rs.getString(2));System.out.printf("%s\t",rs.getString(3));System.out.printf("%s\n",rs.getString(4));}
7,关闭数据库连接
好像java会自动关闭,这里还是加上吧,释放资源,也就几个字母
2
file

目标:在服务器上接收小程序上传的用户名和密码,并保存为txt文档,好将这些数据放到mysql中,步骤较少,用到了jsp中request对象的getParameter方法可以获取参数,直接上代码:
File file = new File("D:/register.txt");String username = request.getParameter("username");//获取到用户名参数String password = request.getParameter("password");//获取到用户的密码char[] p = password.toCharArray();//转为字符数组型char[] n = username.toCharArray();try{Writer outer = new FileWriter(file);//创建一个指向该文件的对象,后面通过这个对象进行写入数据outer.write(n);outer.write(" ");//用户名和密码用空格隔开outer.write(p);outer.close();//关闭文件}catch(IOException e){out.println(e);
3
jvm

学习笔记:(不知道是做什么的,先记住有这个东西,等以后再理解)
方法区、堆、虚拟机栈、本地方法栈、程序计数器
1.方法区(Method Area)存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
2.堆(Heap) 存放对象实例,几乎所有对象实例都在这里分配内存
3.虚拟机栈(VM Stack) 描述的是Java方法执行的内存模型:每个方法在执行的同时会创建一个Stack Frame(方法运行时的基础数据结构)用于存储局部变量表、操作数栈、动态连接、方法出口等信息
4.本地方法栈(Native Method Stack) 与虚拟机栈类似,不过是为虚拟机使用的Native方法服务。(有的虚拟机譬如Sun HotSpot虚拟机直接把本地方法栈和虚拟机栈合二为一)
5.程序计数器(Program Counter Register) 可看作当前线程所执行的字节码的行号的标识器

4
类加载机制

1、父类静态对象和静态代码块
2、子类静态对象和静态代码块
3、父类非静态对象和非静态代码块
4、父类构造函数
5、子类非静态对象和非静态代码块
6、子类构造函数
5
错题笔记

静态成员默认赋值为0
关键字volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized要好,并且只能修改变量,而synchronized可以修饰方法,以及代码块
多线程访问volatile不会发生阻塞,而synchronized会出现阻塞
volatile能保证数据的可见性,但不能保证原子性;而synchronized可以保证原子性,也可以间接保证可见性,因为它会将私有内存和公共内存中的数据做同步
关键字volatile解决的下变量在多线程之间的可见性;而synchronized解决的是多线程之间资源同步问题



volatile:不稳定的
synchronized:同步的



END




