在写编码的时候遇到一些出现问题的地方,做了些笔记,和朋友们分享一下,希望对你有用
1:
String int Integer相互转型
Integer.valueOf(String s) 将字符串转换为Integer对象
in.inValue() 返回Integer的int值
Integer.parseInt(String s) 将字符串转换为十进制整数
Integer.toString(int t) 返回指定整数的 String 对象
in.toString() 返回一个表示Integer的值String对象
String.valueOf(S s) 返回指定整数的string对象
2:日期格式
SimpleDateFormat
是一个具体的类,用于以区域设置铭感的方式格式化和解析日期
日期和时间格式由日期和时间模式字符串指定,在日期和时间模式字符串中,从Z-A z-a被解释为表示日期或时间字符串的组件的模式字母
常用模式字母对应关系如下:(注意区分大小写)
y 年 year
M 月 month
d 日 day
H 时 hour
m 分 minute
s 秒 second
3:TCP发送端理解
//创建客户端的socker对象(Socker)
//可以理解为一个想发送信息的客户A
//向工作人员提供,接受人,和接受验证码
Socket s=new Socket("192.168.12.57",10000);
//获得输出流,写数据
//可以理解为是一个帮助用户发送信息的工作人员
//帮助客户书写发送客户要传达的信息
OutputStream os = s.getOutputStream();
os.write("hello,tcp,我来了".getBytes());
//接收服务器反馈
//可以理解为是一个帮助客户联系接受人的工作人员
//帮助客户确认对方是否已经联系成功,并且接受对方的来信,
InputStream is = s.getInputStream();
//创建数组空间,用来储存对方来信信息
byte[] bys=new byte[1024];
//读取来信,并且将读取数据存进数组容器
//返回读取信息字节数
int len=is.read(bys);
//将存储读取信息的数组转化为字符串
String data=new String(bys,0,len);
//将接受的来信输出到控制台
System.out.println("客户端:"+data);
//释放资源
s.close();
4:打印时间:
Calendar cal= Calendar.getInstance();
System.out.println(cal.getTime())
5:异常try{
int[] arr=null;
System.out.println(arr[2]);
}catch(NullPointerException e){ //异常对象声明正确
System.out.println(e);
}
try{
int[] arr=null;
System.out.println(arr[2]);
}catch(ArrayIndexOutOfBoundsException e){ //异常对象声明错误
System.out.println(e);
}
在try语句中如果异常对象声明错误,catch中的逻辑判断语句将不会执行,虚拟机直接报错.终止执行
6:流读取错误
//第一次读取数据
int by = fis.read();
System.out.println(by);
System.out.println((char) by);
fis.close(); //注意此处已经将资源关闭,IO口关闭,所以再读取数据会报错
//第二次读取数据
by = fis.read();
System.out.println(by);
System.out.println((char) by);
fis.close();
运行错误:
Exception in thread "main" java.io.IOException: Stream Closed (字节流已经关闭)
7:子类成员变量的访问
如果子类没有重写方法get(),那么进关在子类中定义了成员变量,返回的还是父类的成员变量.
8:子类初始化
在子类定义新的对象时,会先系统默认的执行父类的无参构造方法,-----父类的无参构造方法有先与子类的构造方法.
如果字类中没有无参构造方法,并且已经定义了子类的构造方法,所以此时系统不再会提供无参默认方法,而这时要想创建子类对象那个,调用父类的无参构造,可以通过调用一个有参数的.
(因为子类是对父类的继承,有些信息是从父类继承而来,在子类中并没有重新定义,而这些信息又是子类所需的,所以需要通过调用父类构造方法,初始化父类信息,以便被子类所应用.)
this.():本类中调用构造方法,需要首行被注释.9:字节流的read方法BufferedInputStream bis=new BufferedInputStream(new FileInputStream("E:\\itcast\\java.txt"));
/*int len;
while((len=bis.read())!=-1){ //read()方法读取字节流,并返回所读取的字节数据(字符对应的字节码)
System.out.println((char)len); //将字节码转换为char字符类型,并输出
}*/
byte[] bys=new byte[1024];
int len1;
while((len1=bis.read(bys))!=-1){ //read(数组)将读取的数据储存如数组,并返回读取数据个数
System.out.println(new String(bys,0,len1)); //
System.out.println(len1);
}
bis.close();
理解补充:
read(数组)将读取的数据储存如数组,并返回实际读取字节数目
该方法先读取一定的数量的字节,储存于数组中,之后再一起输出
单词读取的字节数量,取决于数组的大小,若可以一次存入所有的要读取的数据,那么输出一次即可
如果不能一次性读取完,那么就要循环读取,一次读取的字节数量和数组的长度相同,直至读取完为止.
10:静态变量的储存在类中,被static修饰的成员变量是所有该类的是对象共同拥有的属性,在内存区,存储在静态存储区,通过类进行调用,虚拟机分辨出,该成员变量是静态的,就去静态存储区取静态变量,通过类名进行识别。
静态方法只能访问静态成员
11:多态的体现Animal a=new Cat();
a.eat();
a=Dog();
a.eat();
同一段代码在不同时刻表现出的不同状态/功能
上面的代码中指的是: a.eat();
12:多态转型在继承多态父类向子类转型过程中,父类只能转成父类当前指向的子类,
例如:如果现在父类对象指向狗,而你想将这个父类对象转成猫,会出现运行错误(编译不报错)
13:内存垃圾Cat a = new Cat(); //第一行
//Animal a = new Cat(); //第二行
Animal aa=a;
a.setName("小花");
a.setAge(2);
System.out.println(a.getName() + "," + a.getAge() + "岁");
aa= new Cat("小黑", 1);
System.out.println(a.getName() + "," + a.getAge() + "岁");
a.eat();
如果没有第一行代码,直接用第二行代码中的变量a直接进行重新的创建对象,就会出现堆内存垃圾,
会因为占用内存,影响运行速度.
14:抽象方法的构造抽象类也有构造方法,虽然不能单独的实例化,但是在它的实现子类构造对象时,需要访问父类的构造方法进行初始化.
15.多重继承的重写在抽象类A中定义抽象方法showA,在抽象类B中定义方法showB,B继承C,实现类在C类继承B,如果在B类中没有重写A类中的抽象方法,在C中会一起重写
16:字符流和字节流的read方法在输入流中的read方法(字节和字符的read()方法都是如此,不同的是当利用缓冲数组时,字节流用byte数组为参数,字符流用char数组做参数)
17:File file=new File("E:\\itcast");
File[] listFiles = file.listFiles();
System.out.println(Arrays.toString(listFiles));
运行结果:
[E:\itcast\Conversion.java, E:\itcast\Conversion0.java, E:\itcast\java.txt, E:\itcast\java1.txt, E:\itcast\java2.txt, E:\itcast\java4.txt, E:\itcast\javaCopy.txt, E:\itcast\javase.txt, E:\itcast\ndmz,jpg, E:\itcast\ndmz.jpg, E:\itcast\ndmz1.jpg, E:\itcast\ndmz2,jpg, E:\itcast\ndmz3.jpg, E:\itcast\ndmz4.jpg, E:\itcast\Student.txt, E:\itcast\单词]18:String类中的equals方法是用来判断两个对象的内容是否相同,而Object 类中的equals方法是用来判断两个对象是否是同一个对象,所谓同一个对象指的是内存中的同一块存储空间,toString方法的好处是在碰到println方法的时候会被自动调用,不用显示的写出来。
19:内部类可以访问外部类的成员,包括私有成员,但是这只限于在内部类内部,内部类的实现对象不能直接访问外部类的成员.
20:关于toString方法,如果父类重写了该方法,子类调用时有相同的作用,可以返回对象信息,如果子类将父类的成员变量重新定义,不会影响该方法输出子类的信息.
21:convert05("123",(String s2)->{
return Integer.parseInt(s2);},(Integer in)->{
return String.valueOf(in+123);
});
最好是用省略格式,因为完整格式有许多标点符号,容易落下.例如return后面的分号,和大括号
22:
listStream.skip(2).filter(s->s.length()>2).limit(3).forEach(System.out::println);
//listStream.skip(2).filter(s->s.length()>2).limit(3).forEach(s->System.out.println(s));
重点;
这两句语句的效果相同,在这可以体现出引用符的好处,不用写重写方法的参数
23:String方法startsWith(): 是否是括号内的内容开始的
endsWith() ; 是否是括号内的内容结尾的
:substring(int a,int b) 取出一个字符串的子字符串(a~b);不包含序号为b的字符
substring(int a) 取出一个子字符串,从索引为a的字符开始,到字符串尾部.
contains(" ") ; 判断字符串中是否包含括号内的字符
indexOf(int a) ; 返回指定子字符串第一次出现的字符串内的索引。
24:在遇到遍历数组,或遍历集合时,如果有删除元素的语句,注意删除元素的同时集合和数组的大小会改变,可能影响到遍历,所以,可以将删除元素的语句单独拿出,进行删除
方法1:
for(int i=0;i<arr2.size();i++){
Emoly e=arr2.get(i);
if(e.getName().equals("王五")){
}
if(e.getName().equals("田七")){
e.setManey(e.getManey()+500);
}
}
for(int i=0;i<arr2.size();i++){
Emoly e=arr2.get(i);
if(e.getName().equals("赵六")){
arr2.remove(e);
}
}
方法2:
for(int i=0;i<arr2.size();i++){
Emoly e=arr2.get(i);
if(e.getName().equals("王五")){
e.setName("王小五");
}
if(e.getName().equals("赵六")){
arr2.remove(i--); //删除索引为 i 的元素,然后将索引进行自减(将删除的元素索引取出)
}
if(e.getName().equals("田七")){
e.setManey(e.getManey()+500);
}
}25:
网络编程,TCP先启动服务器端等待接收连接请求,再启动客户端返送连接请求,之后服务器接收信息,同意连接,开始信息传送
|