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、类型转换:如图
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.变量)
理解项目,包,类的区别
项目包含多个包,包包含多个类
同一个包里面可以随便引用同一个包里面其他的所有public方法和类,但main只能有一个。
如果是不同的包,需要使用import 导入,打包使用package
类和方法
8、定义类的语法:[修饰符] class 类名: 修饰名省略或可以使用public、final、abstract
9、定义类的成员变量:[修饰符] type typename [=默认值],修饰符可以是public、protected、private、static、final,其中public、protected、private三个只能出现其中之一,可以与static、final组合修饰。
10、形参个数可变的方法:在定义该形参时类型时加…,也就是当参数的数量不定的时候可以传入多个,此时这个参数会变成一个数组。
Java类注释(@区别于python的类修饰器)
-
@Override
必须重写父类方法,加了这个注释后,子类的某个方法必须要覆盖父类的方法,否则会报错。(Android开发里面用过)
-
@Deprecated
表示方法过时,调用时会被编译器警告,仍然可以运行
-
@SuppressWarnings
忽略该类或方法产生的所有警告
Java常用包
Java的JDBC编程
Java与MySQL
步骤如下:
- 加载驱动,
Class.forName("com.mysql.cj.jdbc.Driver")
,要是这一句会报错可以看下这篇blog。 - 获取数据库连接,创建一个Connection对象,
DriverManager.getConnection(String url, String user, String password)
,第一个是数据库URL(数据库URL写法规律:jdbc:subprotocol:other stuff,Mysql的是jdbc://127.0.0.1:3306/database),第二个是用户名,第三个是密码。 - 从第二布建立的Connection对象中利用createStatement对象建立一个Statement对象,这个对象是用于执行SQL语句的接口。可以执行DDL,DCL语句,可以执行DML,还可以用于执行SQL查询。
进行MySQL查询:
- 按照以上步骤后,进行SQL查询需要利用Statement的对象的executeQuery(SQL语句)方法,该方法返回一个结果集ResultSet对象,所以此时需要建立一个ResultSet对象。
ResultSet对象方法:
有关指针的方法:
close():释放ResultSet。
absolute(int row):将记录的指针移动到第row行,如果row是负数,则移动到倒数,如果移动后的记录指针指向一条有效位置,则返回True。
beforeFirst():将指针移动到最开头,即建立时的初始位置。
first():将指针移动到第一行行首。有效返回true
如何理解这里的beforeFirst()和first()?,拿C语言的链表来说。beforeFirst()指的是头节点,而first()指的是第一个头节点的下一个节点,也就是第一个节点。
- previous():定位到上一行。有效返回true
- next():定位到下一行。有效返回true
- last():定位到最后一个。有效返回true。
- afterLast():定位到尾结点。
- 获得ResultSet结果集之后,进行数据处理。
- 回收资源(在Java7以后try会autoclosable,在此中的类会继承autoclosable,于是使用try后再连接数据库,Java会自动回收资源,也就不需要手动回收)。
MySQL执行DDL和DML语句:
步骤和之前类似,使用executeUpdate()()进行DDL和DML语句。
Java I/O
1.关于文件读取
首先得new一个File对象名可以直接赋值目录,或者直接一个文件
有关访问文件名的方法:
- getName():返回获取文件名或路径名(如果是路径,则返回最后一级子路径名)
- getParent():返回该对象所对应的相对路径的父路径
- getAbsoluteFile():返回该对象的绝对路径(一个File对象)
- getAbsolutePath():返回该对象的绝对路径(一个字符串,和4方法没必要太过于区分)
- getPath():返回该对象的相对路径名
- renameTo(name):重命名此对象的文件或目录,如果成功返回true,否则返回false。
有关检测文件的方法:
- exists():判断fp是否存在
- canWrite():判断fp是否可写
- canRead():…
- isFile():判断对象是不是文件
- isDirectory():判断对象是不是目录
- isAbsolute():判断fp是否是绝对路径(可以根据此判断是否为Windows,如果是Windows开头为盘符,其他系统是以/开头的)
获取常规文件信息:
- lastModified():返回文件的最后修改时间(long类型)
- length():返回文件的内容长度
文件操作的相关方法:
- createNewFile():当此文件不存在时,该方法可以创建该对象指定的文件
- delete():删除该rp
- static File createTempFile(xxx):xxxx
- deleteOnExit():注册一个删除钩子,当Java虚拟机退出时,删除该rp
目录操作相关方法:
- mkdir(): 试图创建该p,该对象必须是一个路径。创建成功返回True。
- list():列出fp所有的子文件名和路径名,返回String数组
- listFiles():列出fp所有的子文件和路径,返回File数组
- static File[] listRoots():列出系统所有的根目录,一个静态方法可以直接调用