前言
因为之前学习过Python,所以上手Java比较快,这周陆陆续续大致把Java过了一遍(知识大致熟悉了一下其中的用法,具体细节还需要悉心学习)。刚好老师也希望我们记录一下自己的学习过程。就做一下这周的学习小结。
Java的特点
1.完全的面向对象和简单性
2.平台无关性
3.安全性和可靠性
4.并发和分布式计算的支持
5.高效的网络编程机制
平台无关性:又称作跨平台性,是指程序不经修改,就可以正确地运行于不同的软硬件平台。Java实现跨平台有两个关键要素:虚拟机和字节码。虚拟机是用于做Java指令的解释器。不同平台的虚拟机是不一样的。字节码是虚拟机解释执行的中间代码,指令以字节(而非二进制)形式出现。字节码最大的特点是格式统一。这样,不同的编译器产生格式统一的字节码;同时,不同的虚拟机又能对字节码进行统一的解释执行,在运行前根据所处的软硬件平台即时产生合适的二进制代码。这样,轻松实现跨平台需求。
环境变量的配置
PATH:C:\Program Files\Java\jdk1.8.0_121
CLASSPATH:C:\Program Files\Java\jdk1.8.0_121\lib
基本语法:
大致语法与C语言相通。感觉最大的不同就是输入语句。
首先需要导入 java.util下的Scanner类,然后实例化一个对象,通过对象中的方法来实现输入,而不是像C语言或是Python中,直接使用某个函数来执行这一操作。
import java.util.*;
public class Input{
public static void main(String[] args){
Scanner input = new Scanner();
String name = input.nextLine(); //输入一个字符串
Integer id = input.nextInt(); //输入一个整数
}
}
面向对象
面向对象这一部分和Python大同小异
当创建一个类的实例时,默认调用类中的构造函数,用于初始化一个对象。
public class Person{
private static String country = "China";
private String name;
private Integer age;
public Person(String name, Integer age){
this.name = name;
this.age = age;
}
}
在定义的Person类中,name和age是实例属性,而static修饰的country是类的属性。类属性在使用的时候可以直接通过类名.名字的方法使用,而实例属性则必须实例化一个对象后才能使用。
类的属性是共享的,也就是说,无论实例化多少个对象,其类的属性的内存中只有一份,不会因为对象的增加而增加。
重载
在刚刚接触Java的过程中,发现它竟然不支持默认参数,在Python中,我可以这样使用函数
def Func(name, age=15):
print name, age
Func("Jack")
Func("Jack", 20)
而在Java中,是不支持这样的默认参数的,那应该怎么办呢?
在Java中提供了重载这一机制让函数支持“同名不同参”这一特性。
例如:
void f(int x, int y){}
void f(double x, double y){}
void f(double x, float y){}
JDBC
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
连接数据库
package com.imooc.sql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBUtil {
private static final String URL = "jdbc:mysql://127.0.0.1:3306/project"; //URL
private static final String USER = "root"; //账号
private static final String PASSWORD = "root"; //密码
private static Connection conn; //连接
static{ // 静态块 优先执行
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//2.获得数据库的连接
try {
conn = DriverManager.getConnection(URL, USER, PASSWORD);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getConnection(){
//返回一个连接对象,供其他包使用
return conn;
}
public static void main(String[] args) throws ClassNotFoundException, SQLException{
System.out.println("Hello");
}
}
}
数据表中新增一列
package dao;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.imooc.sql.DBUtil;
import model.Person;
public class PersonDao {
/**
* 新增用户
* @param g
* @throws SQLException
*/
public void addPerson(Person g) throws SQLException{
Connection conn = DBUtil.getConnection();
String sql = ""+
"insert into person"+
"(user_name, sex, age, birthday, email, mobile, isdel)"+
"values("+
"?, ?, ?, ?, ?, ?,?)";
//预编译sql语句
PreparedStatement ptmt = conn.prepareCall(sql);
ptmt.setString(1, g.getUser_name());
ptmt.setInt(2, g.getSex());
ptmt.setInt(3, g.getAge());
ptmt.setDate(4, new Date(g.getBirthday().getTime()));//普通Date转换成sql中的Date
ptmt.setString(5, g.getEmail());
ptmt.setString(6, g.getMobile());
ptmt.setInt(7, g.getIsdel());
ptmt.execute();
}
在使用JDBC的过程中遇到过类似于这样的一个报错
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE
旨在解决问题
com.mysql.jdbc.MysqlDataTruncation: Data truncation:
Truncated incorrect DOUBLE的调错
关于这种问题的解决,我的方案是:
将sql语句中的and换成','(逗号)就好了
例如:
update _category set name = ? and description = ? where id = ?
改成
update _category set name = ? , description = ? where id = ?
问题出在sql语句中的and, 将其换成逗号即可,暂时还不清楚为什么会出现这种问题。
以上这些就是一周以来的主要一些总结,还有一些内容在学习中,记下来也是方便以后的学习。