java学习日记(1)

编译java程序

  在写完java 代码之后,在cmd中输入如下指令:
javac -d destdir srcFile
其中"-d desdir"是javac的命令一种。用以指定编译生成的文件存放路径。destdir就是本地磁盘的一个路径,srcFile就是java源文件所在的位置。(在当前路径下生成destdir可以直接用.来代替)

运行java程序

  在编译java之后,会生成一个.class文件,需要运行,在cmd中跳转到该.class文件的目录,输入java 生成文件(不需要加.class,java严格区分大小写)



java基本规则

java程序的组织形式

  Java是一种纯粹的面向对象的程序设计语言,所以必须以类(class)的形式存在不能有可执行语句、方法等独立存在,如果想要执行java的class,则这个类里面必须要有main方法,且必须要用public static void来修饰而且main方法的形参必须是字符串数组类型(String[] args是字符串数组的形式),也就是main函数写法几乎是固定的。程序解释运行也是从main方法开始的。而不含main函数的可以通过其他的main执行时直接或者间接调用。

java源文件的命名规则

  通常情况下,建议一个源文件只定义一个类,不同的类用不同的源文件定义;并且最好让java源文件名与该文件中定义的public类同名。

其他

  java自带回收机制。

基础

1、JAVA语句分割用";",可以跨多行(和C类似)
2、JAVA数据基本类型:boolean,byte,short,int,long,char,float,double。(注意,一般将一个数字(这个数字的类型int)赋值给一个long变量时,如果这个数字较大,已经超过了int的范围,则需要在数字后面加L,不加L会报错),定义数值时可以*的使用使用下划线分割比如输入int a = 1000_0000是可以的。
3、JAVA的进制:java整数值可以有4种进制表示方式:十进制,二进制(数字结尾有b或者B),八进制(数字开头是0),十六进制(数字开头是0x或者0X,a~f不区分大小写)。
4、字符型变量有2种表示方式:(1)单个字符。(2)Unicode值,格式为’\u[十六进制整数]’。
5、(boolean)布尔类型,一个变量只能是true或者false,true和false不会直接转换成boolean类型,但将boolean类型的值与字符串拼接,会自动转换成字符串(不仅仅是布尔类型,任何基本类型与字符串类型连接会转成字符串),比如String a = true+"";System.out.println(a);结果会打出true。
6、类型转换:如图
java学习日记(1)
7、强制类型转换:和C类似**(注意float b=1.1;是不对的,1.1是double类型的,应该是float b=1.1f;或者float b=(double)1.1;)**
8、表达类型的自动提升:1、整数表达式将自动提升到表达式中最高等级的同样的类型(如转换类型图)2、byte,char,short类型自动提升为int类型。
9、a++(先自加后带入表达式运算)和++a(先带入表达式运算后自加)。
10、三目运算符:(组成:[判断语句1]?[如果正确则执行语句]:[如果错误则执行语句])

语法

1、注释单行注释用(//),多行注释(/*注释内容*/)

2、API文档注释:
MARK:44页
(1):查看某个API的方法:

javadoc [选项] [[java源文件]||[包]]

常用选项如下:

① -d [路径]:指定一个路径,用于将生成的API文档放到指定目录下。
②-windowtitle [text]:指定一个字符串,用于设置API文档的浏览器窗口标题。
③-doctitle [html-code]:指定一个HTML格式的文本,用于指定概述页面的标题。(只有对处于多个包下的源文件生成API文档时,才有概述页面)
④-header [html-code]:指定一个HTML格式的文本,包含每个页面的页眉。

…46页
3、System.out.print()和System.out.println()都是输入,前者不会换行,后者输出结束会自动换行。
4、if,switch,while,do…while和C语言一样,for循环(;;)可以和C类似。或者( type name : 被迭代变量 )可以和python类似(区别,这里的type类变量是传值调用,修改该type类变量并不会修改原来被迭代变量中的元素)。
5、定义数组的两种方式:例如①int[3] num;②int num[3];(和C语言一样)。
6、初始化数组(按照上面的定义):①num = new int[]{1,2,3};(new的意思就是新建一个实例或者叫做对象)②或者在定义的时候初始化:int[3] num={1,2,3}。
7、Object类的数组可以存储多种数据类型;

修饰符解读

public、private和protected是有关访问权限的修饰符:
public表明可以随意访问,private不能随意访问、protected、default。
static和final是控制类成员变化的修饰符:
static(静态成员修饰符,作为成员方法时没有类的情况下可以直接调用该方法),final代表该修饰方法不能或者属性不能被继承、修改、覆盖。

(?为类定义了私有变量或者方法,如何设置其私有变量或者方法?在类里面定义public方法连接私有变量或者方法)

(?如何在new一个对象时直接给该对象的一些变量赋值?在该类里面再public定义一个同名的的方法,然后方法的参数为你需要赋值的this.变量)
java学习日记(1)

理解项目,包,类的区别

项目包含多个包,包包含多个类

同一个包里面可以随便引用同一个包里面其他的所有public方法和类,但main只能有一个。

如果是不同的包,需要使用import 导入,打包使用package

类和方法

8、定义类的语法:[修饰符] class 类名: 修饰名省略或可以使用public、final、abstract
9、定义类的成员变量:[修饰符] type typename [=默认值],修饰符可以是public、protected、private、static、final,其中public、protected、private三个只能出现其中之一,可以与static、final组合修饰。
10、形参个数可变的方法:在定义该形参时类型时加…,也就是当参数的数量不定的时候可以传入多个,此时这个参数会变成一个数组。
java学习日记(1)

Java类注释(@区别于python的类修饰器)

  1. @Override

    必须重写父类方法,加了这个注释后,子类的某个方法必须要覆盖父类的方法,否则会报错。(Android开发里面用过)

  2. @Deprecated

    表示方法过时,调用时会被编译器警告,仍然可以运行

  3. @SuppressWarnings

    忽略该类或方法产生的所有警告

Java常用包

Java的JDBC编程

Java与MySQL

步骤如下:

  1. 加载驱动,Class.forName("com.mysql.cj.jdbc.Driver"),要是这一句会报错可以看下这篇blog
  2. 获取数据库连接,创建一个Connection对象,DriverManager.getConnection(String url, String user, String password),第一个是数据库URL(数据库URL写法规律:jdbc:subprotocol:other stuff,Mysql的是jdbc://127.0.0.1:3306/database),第二个是用户名,第三个是密码。
  3. 从第二布建立的Connection对象中利用createStatement对象建立一个Statement对象,这个对象是用于执行SQL语句的接口。可以执行DDL,DCL语句,可以执行DML,还可以用于执行SQL查询。

进行MySQL查询:

  1. 按照以上步骤后,进行SQL查询需要利用Statement的对象的executeQuery(SQL语句)方法,该方法返回一个结果集ResultSet对象,所以此时需要建立一个ResultSet对象。

ResultSet对象方法:

​ 有关指针的方法:

  1. close():释放ResultSet。

  2. absolute(int row):将记录的指针移动到第row行,如果row是负数,则移动到倒数,如果移动后的记录指针指向一条有效位置,则返回True。

  3. beforeFirst():将指针移动到最开头,即建立时的初始位置。

  4. first():将指针移动到第一行行首。有效返回true


如何理解这里的beforeFirst()和first()?,拿C语言的链表来说。beforeFirst()指的是头节点,而first()指的是第一个头节点的下一个节点,也就是第一个节点。


  1. previous():定位到上一行。有效返回true
  2. next():定位到下一行。有效返回true
  3. last():定位到最后一个。有效返回true。
  4. afterLast():定位到尾结点。
  1. 获得ResultSet结果集之后,进行数据处理。
  2. 回收资源(在Java7以后try会autoclosable,在此中的类会继承autoclosable,于是使用try后再连接数据库,Java会自动回收资源,也就不需要手动回收)。

MySQL执行DDL和DML语句:

步骤和之前类似,使用executeUpdate()()进行DDL和DML语句。

Java I/O

1.关于文件读取

首先得new一个File对象名可以直接赋值目录,或者直接一个文件

有关访问文件名的方法:

  1. getName():返回获取文件名或路径名(如果是路径,则返回最后一级子路径名)
  2. getParent():返回该对象所对应的相对路径的父路径
  3. getAbsoluteFile():返回该对象的绝对路径(一个File对象)
  4. getAbsolutePath():返回该对象的绝对路径(一个字符串,和4方法没必要太过于区分)
  5. getPath():返回该对象的相对路径名
  6. renameTo(name):重命名此对象的文件或目录,如果成功返回true,否则返回false。

有关检测文件的方法:

  1. exists():判断fp是否存在
  2. canWrite():判断fp是否可写
  3. canRead():…
  4. isFile():判断对象是不是文件
  5. isDirectory():判断对象是不是目录
  6. isAbsolute():判断fp是否是绝对路径(可以根据此判断是否为Windows,如果是Windows开头为盘符,其他系统是以/开头的)

获取常规文件信息:

  1. lastModified():返回文件的最后修改时间(long类型)
  2. length():返回文件的内容长度

文件操作的相关方法:

  1. createNewFile():当此文件不存在时,该方法可以创建该对象指定的文件
  2. delete():删除该rp
  3. static File createTempFile(xxx):xxxx
  4. deleteOnExit():注册一个删除钩子,当Java虚拟机退出时,删除该rp

目录操作相关方法:

  1. mkdir(): 试图创建该p,该对象必须是一个路径。创建成功返回True。
  2. list():列出fp所有的子文件名和路径名,返回String数组
  3. listFiles():列出fp所有的子文件和路径,返回File数组
  4. static File[] listRoots():列出系统所有的根目录,一个静态方法可以直接调用