测试总结
知识归纳
传值与传引用
方法参数为基本数据类型
方法参数为八大基本数据类型,则该方法不会对实际参数任何影响
public static void main(String[] args) {
int a=1;
int b=2;
basicType(a,b);
System.out.println("a="+a+" b="+b);//a=1 b=2
}
public static void basicType(int a,int b){
a=10;
b=14;
System.out.println("a="+a+" b="+b);//a=10 b=14
}
方法参数为引用类型
方法的参数为引用类型,直接修改该参数会对其造成影响;
若方法中又创建了新对象,则不会对实际参数有影响;
public static void main(String[] args) {
Demo7 d=new Demo7();
//一个方法的参数为引用类型 直接修改该参数会对其造成影响
Piont p=new Piont();
p.x=7;
p.y=2;
d.p(p);
System.out.println(p.x+"==="+ p.y);
//2===8 值改变
//方法的参数为引用类型 若方法中又创建了新对象 则不会对实际参数有影响
p.x=3;
p.y=5;
d.p2(p);
System.out.println(p.x+"==="+ p.y);
//3===5 值未变
}
public void p(Piont p){
p.x=2; //未有新对象产生 变量指向最初对象
p.y=8;
System.out.println(p.x+"==="+p.y);//2===8
}
public void p2(Piont p){
p=new Piont();
//产生了新对象 变量指向新对象
System.out.println(p.x+"==="+p.y);//0===0
}
class Piont{
int x;
int y;
}
方法参数为字符串[引用类型]
方法参数为字符串[引用类型],若该方法赋值一个新字符串[无论是直接赋值或new String()],不会对实际参数造成影响;
String类型具有不可变性,一旦对象被创建该对象则不会被改变
若对该对象进行修改,则只会创建出新对象,原来的对象保持不变
public static void main(String[] args) {
Demo7 d=new Demo7();
//一个方法参数为字符串[引用类型] 该方法赋值一个新字符串 不会对实际参数造成影响
String strHello = new String("hello");
d.p(strHello);
// 引用传递: fun3函数内部,修改的是局部变量str的引用地址
System.out.println("strHello:" + strHello);
//strHello:hello
}
public void p(String s){
s= "abcd";
// 字符串常量池,把常量池中的"abcd"的引用赋值给str 相当于new了一个对象
System.out.println("str:" + s);
//str:abcd
}
Map键值对
Map接口实现类为HashMap、TreeMap
Map是无序且键不重复的;
判断key是否重复,由equals()方法决定
键值均可以是null,但键的null只能有一个;
获取键,keySet(), 返回Set集合
获取值,values() ,返回Collection集合
获取键值对,entrySet()
添加/修改键值 put(key,value)
若key在集合中不存在,即为添加新的键值对;
若key在集合中已存在,即为修改该键对应的value的值
get(key) 找集合key键的值,找到返回对应的value;没找到,则返回key类型的默认值
File
File类只用于表示文件(目录)的信息(大小,名称等),不能对文件内容进行访问
File创建对象
new File(String parent,String child)
File f1=new File("D://text","file.txt");
new File(String pathname)
File f1=new File("D://textfile.txt");
new File(File parent,String child)
File f=new File("D://text");
File f3=new File(f,"file.txt");
集合
Coolection接口的子类包含: Set接口和List接口
Map接口的实现类: HashMap ,TreeMap , Hashtable, ConcurrentHashMap以及Properties
Set接口: HashSet , TreeSet , LinkedHashSet等
List接口: ArrayList , LinkedList , Stack 以及Vector等
约束集合与未约束集合
未约束集合类型,则集合中可添加任意类型
此时取出的数据均为object类型
List p=new ArrayLis(); //未约束集合
判断下列是否有错,错哪
public class MapTest {
public static void main(String[] args) {
List pList = new ArrayList();
pList.add("A");
pList.add("B");
for (int i = 0; i < pList.size(); i++) {
String str = pList.get(i);
System.out.print(str);
}
}
}
约束数据类型为同一种固定类型(数组元素放同一种类型)
泛型语法规则
List< Point > 约束集合只能存放Point类型
List< Point > ps=new ArrayList<>(); ps是List类型 ps的泛型是Point
List接口: ArrayList , LinkedList
List集合是长度不固定、动态分配的集合
add(i,值) 即在下标为i的位置插入值
判断下列有什么问题
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.add("123");
list.add(4, "4567");
String s = (String) list.get(2);
System.out.println(s);
}
ArrayList每次扩容50%,创建集合默认值为10
数组转ArrayList: 通过 Arrays.asList转换
Integer[] as2 = {1,2,3,3,4,5};
List<Integer> integers = Arrays.asList(as2);
ArrayList转数组: 通过集合的toArray()转换
ArrayList<String> as = new ArrayList<>();// 初始容量10
// 存储1~10000
ArrayList<Integer> as1 = new ArrayList<>(5000);// 设置初始容量
as.add("A");as.add("A");as.add("A");as.add("A");as.add("A");
Object[] objects = as.toArray(); // 不方便使用。
String[] strings = as.toArray(new String[0]);//toArray(new
String[0]) 根据参数的类型,得到对应类型的数组。
for(String s: strings){
System.out.println(s.length());
}
}