跟着小松学java(JAVA 中的一些知识点总结(一))

学者们是否会遇到一些看似很简单的问题但是却很难回答的问题,如果你没有准备的话还真的回答不上来,下面我就重最常见的一些java 知识点作一些总结和归纳。

第1题:“==” 和 “equals” 有什么区别?
先举个例子:
String str1=“hello”;
String str2=new String(“hello”);
str1str2 //返回 false;
str1.equals(str2)//返回 true;
为什么呢,其实很简单 str1 和 str2 是2个对象 对应两个地址。“
” 比较是地址的值是否相等,这里显然不等所以为false.equals 比较的是内容 他们的都是“hello” 所以为 true;如何比较字符串是否相同一般都用equals方法。
equals 本质上是“==” 是值内容的比较,如果用两个自定义对象内容相等时,引用比较的就是false , 如果是String类型比较内容相同就为true 因为重写了equal 方式为内容等值比较。

第2题:两个对象的hashCode() 相同,则 equals() 一定为true 吗?
答案:不一定
重新equals 时 hashcode() 会被重写 所以不一定相同。

Java对于eqauls方法和hashCode方法是这样规定的:
(1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同;
(2)如果两个对象的hashCode相同,它们并不一定相同。

第3题:final 在 java 中有什么作用?
a) final可以修饰类,这样的类不能被继承。
b) final可以修饰方法,这样的方法不能被重写。
c) final可以修饰变量,这样的变量的值不能被修改,是常量。
final String st3="";
st3=“aa”;//无法编译 st3变成被 final 修饰
第4题: java 中的Math.round(-1.5) 等于多少?
答案:-1 很容易理解可以这么想: 1.5 四舍五入 为:2 ;1.3 --》1;-1.0 +0.5 向下取整 最近的整数;也就是 -0.5 的最近整数为:-1;-1.5 为 -1;
第5题:String 属于基础数据类型吗?
答案:不是
String 是引用类型,是被final 修饰的类。基础类型只有8个,byte,short,int, long,float,double,boolean,char.
说到这里顺便复习一下基本类型:
字节 byte 8bit(8位) 1kb=1024byte 一个字2个byte 1w=524288个字
短整型 short 16bit(16 位=2个字节)
整型 int 32bit(32位=4个字节)
长整型 long 64bit(64位=8个字节
单精度)浮点型 short 32bit(32位=4个字节)
双精度)浮点型 double 64bit(64位=8个字节)
字符类型 char 16bit(16位=2个字节)
布尔类型 boolean true /false
记忆:8位:Byte(字节型) 16位:short(短整型)、char(字符型) 32位:int(整型)、float(单精度型/浮点型) 64位:long(长整型)、double(双精度型) 最后一个:boolean(布尔类型

第6题:String 类有哪些方法?
1,indexOf (String st) 返回参数字符串在指定字符串首次出现的位置,如果没有则返回-1;
2,lastIndexOf(String s) 返回参数字符串在指定字符串最后一次出现的位置,如果没有则返回-1;
3,charAt(int num) 返回索引指定位置的字符
4,substring(int beginindex) 从索引位置开始截取到最后
5,substring(int beginindex,int endindex) 从索引位置开始截取到最后索引位置
6,trim() 去掉字符串前后空格
7,replace() 替换字符串
8,startsWith() 判断字符串是否以指定内容开头
9, endWith() 判断字符串是否以指定内容结尾
10,equals() 判断字符串是否相等 区分大小写
11,equalsIgnoreCase() 判断字符串是否相等忽视大小写
12,toLowerCase() 将所有大小字符改为小写
13,toUpperCase() 将所有小写字符改为大写
14,split(String str) 分割字符串,返回数组
15 , split(String str,int limt) 该方法可根据给定的分割符对字符串进行拆分,并限定拆分的次数。

第7题 String str=“i” 与 String str=new String(“i”) 一样吗?
答案:不一样; str 创建了新的对象,引用不同。

第8题:如何将字符串反转?
1,递归方法:
public static String reverse1(String s) {
int length = s.length();
if (length <= 1){
return s;
}
String left = s.substring(0, length / 2);
String right = s.substring(length / 2, length);
return reverse1(right) + reverse1(left);
}
2,循环遍历
public static String reverse2(String s) {
int length = s.length();
String reverse = “”;
for (int i = 0; i < length; i++)
reverse = s.charAt(i) + reverse;
return reverse;
}
3,stringBuffer 中的reverse() 方法
String s=“abcdefg”;
StringBuffer stringBuffer=new StringBuffer();
String string=stringBuffer.append(s).reverse().toString();
System.err.println(string);

第9题: 操作字符串都有哪些类?他们有什么不同?

答:String StringBuffer StringBuilder
1, String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
2,String 一旦创建有字符串“abc” 如果要在abc后追加字符串“de” .虚拟机会在创建一个对象将老的“abc”赋值给新的对象并追加“de”.然后老的对象就会被回收掉,如果继续更新字符串就会不断创建和回收。这样效率非常的低。
3,在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的
如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。
4,String:适用于少量的字符串操作的情况
  StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
  StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

第10题:抽象类必须要有抽象方法吗?
答:不必须
用abstract修饰的类,即抽象类;用abstract修饰的方法,即抽象方法。
抽象方法不能有方法主体。
抽象类不能被实例化。因为抽象类中方法未具体化,这是一种不完整的类,所以直接实例化也就没有意义了。
抽象类中不一定要包含abstrace方法。也就是说,抽象中可以没有abstract方法。
一旦类中包含了abstract方法,那类该类必须声明为abstract类。

第11题:普通类和抽象类有哪些区别?
答:1,抽象类不能被实例化,必须被继承在子类中实现抽象方法。而普通类可以直接创建对象。
2,抽象类的方法修饰符不能为 private 否则就不能在子类中实现了。
3,如果一个类继承了抽象类那么就必须实现父类的抽象方法,否则子类方法就要定义为抽象方法
4,抽象类中的方法没有方法体
第12题:抽象类能使用final修饰吗?
答:不能。
因为抽象类是需要被继承后来实现的,而final 修饰的类不能被继承。
第13题:接口和抽象类有什么区别?
答:从概念上来区别他们不是同一个。接口在乎的是具体的动作的抽象,是在乎具体做什么。而抽象方法是从不明确中抽取出来的方法,强调的是什么。比如抽象一个老师写个抽象类,那么就确定了该类的对象是老师而不是狗。所定义的抽象方法也是针对老师。如果定义一个接口方法比如“跑” ,有可能是人在跑也有可能是车在跑,所以接口定义了要做什么;
区别:
1,接口是要被实现的,接口与接口可以实现多继承,抽象类是要被单继承的。
2,抽象程度接口的要高于抽象类,抽象类可以抽象方法和属性,而接口只能抽象方法和不可变的常量;
3,访问修饰符抽象方法可以有public、protected和default这些修饰符接口方法默认修饰符是public。你不可以使用其它修饰符。
4,构造器:抽象类可以有构造器接口不能有构造器
5,多继承 抽象方法可以继承一个类和实现多个接口 接口只可以继承一个或多个其它接口
6,速度:它比接口速度要快 接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。
7,添加新方法如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。
如果你往接口中添加方法,那么你必须改变实现该接口的类。
第14题:java 中IO流分为几种?
答:
【字节流】 InputStream 字节输入流,对文件内容读取 OutputStream 字节输出流 将字节写入文件。
【缓冲流】BufferedInputStream 缓冲字节输入流 BufferedOutputStream 缓冲字节输出流 关闭前需要flush()。
【对象流】ObjectInputStream 是用来对对象进行反序列化的输入流。 ObjectOutputStream 是用来对对象进行序列化的输出流
【字符流】 Reader 是所有字符输入流的父类。Writer 是所有字符输出流的父类。
【转换流】OutputStreamWriter(FileOutputStream,“UTF-8”),拿着字符去指定的编码表UTF-8表中查询,将字符值转换成字节存储到 OutputStreamWriter缓冲区中,然后字节流FileOutputStream把缓冲区中的字节写到指定的文件中,这是编码的过程。nputStreamReader(FileInputStream,“UTF-8”)字节转换成字符,去指定的字符编码表查询,读取字节,然后将其解码成字符。
【打印流】打印流PrintStream和PrintWriter负责数据目的,为其他的输入流添加了功能,能方便的打印各种数据形式,而且不会抛出IOException异常。打印在控制台或者文件中都可以。

********第15题:BIO NIO AIO 有什么区别?
BIO : 同步阻塞IO
NIO:同步非阻塞IO
AIO:异步阻塞IO
第16题:Files 的常用方法都有哪些?
1,File.listRoots();获取所有的根盘符:输出 c:\
d:
File[] files=File.listRoots();
for(File item:files) {
System.err.println(item.getPath());
}
2,files.list(); 或files.listFiles();获取目录下的所有文件夹名和文件名:
File files=new File(“d:\huangsong”);
String[] lis= files.list();
for(String str:lis) {
System.err.println(str);
}
3,files.createNewFile(); 指定目录文件名创建文件,如果存在就返回false ,创建成功返回true
File files=new File(“d:\huangsong\newfile.txt”);
boolean lis= files.createNewFile();
System.err.println(lis);
4,files.mkdir(); 创建一层文件夹:new
File files=new File(“d:\huangsong\new”);
boolean lis= files.mkdir();
5,files.mkdirs(); 创建多个文件夹:new\two
File files=new File(“d:\huangsong\new\two”);
boolean lis= files.mkdirs();
System.err.println(lis);
6, files.renameTo(fil); 重命名 dd.txt 命名为dd44.txt
File files=new File(“d:\renamess\dd.txt”);
File fil=new File(“d:\renamess\dd44.txt”);
files.renameTo(fil);
如果路径不同则操作无效
7, files.delete(); 只能删除空文件夹或者文件
File files=new File(“d:\text”);
files.delete();
8,jvm退出时删除临时文件
File files=new File(“d:\text”);
files.deleteOnExit();
9,files.exists(); 判断文件或文件夹是否存在
File files=new File(“d:\text”);
boolean isHave=files.exists();
System.err.println(isHave);
10,files.isFile(); 判断是否为文件夹 ,如果不存在返回false
File files=new File(“d:\text”);
boolean isHave=files.isFile();
System.err.println(isHave);
11,files.isDirectory(); 判断是否为一个目录 ,如果不存在返回false
File files=new File(“d:\text”);
boolean isHave=files.isDirectory();
System.err.println(isHave);
12,files.isHidden();是否是一个隐藏的文件或是否是隐藏的目录。
File files=new File(“d:\text”);
boolean isHave=files.isHidden();
System.err.println(isHave);
13,files.isAbsolute();判断是否为决对路径名
File files=new File(“d:\text”);
boolean isHave=files.isAbsolute();
14,files.getName();获取文件夹或文件的名字
File files=new File(“d:\text”);
String isHave=files.getName();
15,files.getAbsolutePath(); 获取文件或文件夹的绝对路径
File files=new File(“d:\text”);
String isHave=files.getAbsolutePath();
16,获取文件字节的数,如果是文件夹,或文件不存在都返回0
File files=new File(“d:\text\ss.txt”);
long isHave=files.length();
System.err.println(isHave);
17,files.getParent(); 获取父路径:d:\text
File files=new File(“d:\text\ss.txt”);
String isHave=files.getParent();
18,files.lastModified(); 获取最后一次修改时间戳
File files=new File(“d:\text\ss.txt”);
long isHave=files.lastModified();
System.err.println(isHave);
19.files.list(FilenameFilter file) 指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。
File files=new File(“d:\text\”);//目录

  String[] strings=files.list(new FilenameFilter() {

private String tag=“d.txt”;//条件
@Override
public boolean accept(File dir, String name) {

return name.endsWith(tag);

}
});

 Arrays.sort(strings);
 for(String str:strings) {
   System.err.println(str);//dd.txt
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值