5月9日之前笔记整理

1、流、文件、IO等

1、创建文件前若父文件夹不存在会抛出异常,因此创建文件前通常会创建父目录:file1.getParentFile().mkdirs()

2、创建的文件夹存在时不会创建新的文件夹覆盖旧的,而是会合并;

3、Double.MAX_VALUE  .MAX_VALUE某数字类型的最大值;

4、fileInputStream1.read()调用后会阻塞进程,并不会一下子读完。调用一次取消阻塞一次,读取是读取到JVM中(内存);返回读取字节数,读取完之后再次调用会返回-1;

5、fileOutputStream1.write(byte[] b,int off,int len)//b:数据源;off:起始偏移;len:长度;以byte字节形式写入文件;

6、用循环可批量创建实例,用数组承载;

7、(int) string1.indexof(string2)第一次出现string2的索引,未找到返回-1;

8、printWriter1.Println(string1)基于文件或流,写入字符串,若创建的是非自动刷新的PrintWriter,则需flush冲刷缓冲区;

9、String、StringBuilder、StringBuffer:

  String:本质不可变,可变现象的原因是重新创建了对象,速度最慢;

  StringBuilder:可变字符串,适用于单线程字符缓冲区操作,线程不安全,速度最快;

  StringBuffer:可变字符串,适用于多线程字符缓冲区操作,线程安全,速度中间;

 1         String string="";
 2         StringBuilder stringBuilder=new StringBuilder();
 3         StringBuffer stringBuffer=new StringBuffer();
 4 
 5         int n=3000000;//数据在300万之前StringBuffer时间小于StringBuilder,在300万之后时间越差越大
 6         long s1=System.currentTimeMillis();
 7         for (int i = 0; i < n; i++) {
 8             //string+=i;//速度过慢。。。
 9         }
10         long e1=System.currentTimeMillis();
11         long s2=System.currentTimeMillis();
12         for (int i = 0; i < n; i++) {
13             stringBuilder.append(i);
14         }
15         long e2=System.currentTimeMillis();
16         long s3=System.currentTimeMillis();
17         for (int i = 0; i < n; i++) {
18             stringBuffer.append(i);
19         }
20         long e3=System.currentTimeMillis();
21         System.out.println("string:"+(e1-s1));
22         System.out.println("stringBuilder:"+(e2-s2));
23         System.out.println("stringBuffer:"+(e3-s3));

10、new File(fileParent1,stringChild1)fileParent1下新建stringChild1的文件;

11、字符串比较使用string1.equals(string2)而非“==”;

12、obj1 Instanceof class1和class.isInstance(obj):该obj是否  属于/能不能转化  该类;

  

 具体区别为:

 instanceof 是静态比较,是 Java 内置的比较运算符。instanceof 后面的类名在编译时就已知且固定了,即 obj instanceof ClassAClassA 必须是已经存在的类名,不能是obj.getClass(),不然编译都过不了。

 isInstance() 是动态比较,是个方法。isInstance() 的左边可以在运行时决定,即可以这样 objA.getClass().isInstance(objB),objA 可以作为某个方法的参数被传进来,这样可以动态的看两个对象是否类型兼容。

13、FileInputStream/FileOutputStream  字节流,      无缓冲区,每个字节都会访问硬盘。

  FileReader/FileWriter       字符流,                     都建立在File上

  BufferedReader 缓冲字符输入流,可以一次读取一行

  DataInputStream数据流,建立在字节流上,只能读取DataOutputStream输出的数据

  ObjectInputStream/ObjectOutputStream 对象输入输出流,建立在字节流上

14、Lambda表达式是一种把方法作为参数进行传递的思想

    优点:代码紧凑,不会满是接口和匿名类

    缺点:可读性差,匿名类啰嗦但是清晰,Lambda一旦变长就难以理解;

       难以调试,很难在Lambda中添加log;

       版本支持,需要JDK8以上;

15、创建多线程的三种方式:

  1、继承Thread类;

  2、实现Runable接口;

  3、匿名类;

2、SQL

 1、

1 Class.forname(com.mysql.jdbc.Driver);//加载数据库驱动
2 Connection c=DriverManager.getConnection(
3           "jdbc:mysql://127.0.0.1:3306/databaseName?characterEncoding=utf-8","userName","password");
4 Statement s=c.createStatement;
5 PrepareStatement ps=c.PrepareStatement($);
6 s.execute();//执行
7 create table tableName(
  id int(11) Auto_Increment,
  name varchar(30),
  Primary Key (id)
) Default Charset=utf-8;//新建一个具有id、name字段,主键为id,表名为tableName的表
8 增:insert into tableName values($);
删:delete from tableName where $;
改:update tableName set $ where $;
查:select * from tableName where $;
9 boolean:execute(sql)增查删改
int:executeUpdate(sql)增删改
ResultSet:executeQuery(sql)查
10 c.setAutoCommit(false);//事务,关闭自动提交
c.commit();//手动提交
11 ORM 一个对象对应一条记录,
DAO 数据访问对象,把数据访问封装在该类,其他地方看不到JDBC代码

3、Git
1 git int创建仓库
git add添加文件到缓存区
git commit提交更改
git commit -m "修改日志"
git status 查看git状态
git log 查看日志
git chackout -- fileName使该文件回退到最近一次add或commit
git push origin master 推送
。。。
To Be Continued。。。

4、IDEA
1 Alt+Insert 构造面板
2 Ctrl+Shift+Enter自动补全
3 Shift+F6 重命名
4 Ctrl+Alt+M 抽取逻辑,构建新方法
5 Ctrl+D 快速复制
6 Ctrl+W 选择代码
7 Ctrl+左/右 移动到单词前后
8 Ctrl+[/]方法内部跳跃,代码块前后
9 Ctrl+</>快速折叠
10 Alt+上/下不同方法间跳跃
11 Ctrl+N、Ctrl+Shift+N、双击Shift:查找classes、files、all
12 Ctrl+H类继承关系
13 Ctrl+F12当前类所有方法

5、Others

1、transient 短暂的,被transient修饰的变量不会被序列化
2、ArrayList.ensureCapacity(N)可以预设list大小,
3、ArrayList.clone() ArrayList的浅拷贝,即变量中的元素指向同一个元素
4、"mark : " 跳转标记,可配合break、continue进行循环的跳转
5、 arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
System.arraycopy(原数组,原数组起始位置,目标数组,目标数组起始位置,复制长度),数组深拷贝需要使用该方法
(Object src,int srcPos, Object dest,int destPos, int length)需要事先创建好数组
6、 copyOf(oringinal, int newlength)
arrays1.copyof(原数组,新数组的长度),返回一个新数组,只能从起始位置开始复制
7、 copyOfRange(oringinal,int from, int to)
arrays1.copyOfRange(原数组,起始位置,结束位置)返回一个新数组,包含起始位置,不包含结束位置。
 



猜你喜欢

转载自www.cnblogs.com/lixin-link/p/10841413.html