JAVA学习笔记(第一周)

前言 因为之前学习过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中,是不支持这样的默认参数的,那应该怎么办呢?
在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, 将其换成逗号即可,暂时还不清楚为什么会出现这种问题。
以上这些就是一周以来的主要一些总结,还有一些内容在学习中,记下来也是方便以后的学习。

    推荐阅读