内容:
1、Java中的数据类型
2、引用类型的使用
3、IO流及读写文件
4、对象的内存图
5、this的作用及本质
6、匿名对象
1、Java中的数据类型
Java中的数据类型有如下两种:
- 基本数据类型: 4类8种 byte(1) boolean(1) short(2) char(2) int(4) float(4) long(8) double(8) 注:括号内指某类型是几字节的
- 引用数据类型:String、数组、集合(ArrayList) 、Scanner、自定义类型
基本数据类型和引用数据类型的区别:
- 基本数据类型:声明时直接在栈内存中开辟空间并直接在当前内存中存放数据,赋值时传递的是传值的
- 引用数据类型:声明时会将实际的数据存放在堆内存中,同时在栈内存中存放着在堆内存中的首地址,赋值时传递的是引用的
2、引用类型的使用
(1)String
String的API:
1 引用类型String中的方法(4532) 2 第一组: 判断方法 3 boolean equals(String str); // 比较两个字符串的内容是否相等 4 boolean equalsIgnoreCase(String str); // 比较两个字符串的内容是否相等(忽略大小写) 5 boolean startsWith(String subStr); // 判断某个字符串是否以指定的子串开头 6 boolean endsWith(String subStr): // 判断某个字符串是否以指定的子串结尾 7 8 第二组: 获取方法 9 int length(); // 获取字符串中字符个数 10 char charAt(int index); // 谋取字符串某一个字符(指定下标) 11 String subString(int startIndex); // 从指定下标开始截取字符串,直到字符串末尾 12 String subString(int startIndex, int endIndex); // 从指定下标开始截取字符串,到指定下标结束(左闭右开) 13 int indexOf(String subStr); // 获取子串第一次出现的下标 14 15 第三组: 转换方法 16 String toLowerCase(); // 转成小写串 17 String toUpperCase(); // 转成大写串 18 Char[] toCharArray(); // 变成字符数组 19 20 第四组: 其他方法 21 String trim(); // 去掉字符串两端的空格 22 String[] split(String str); // 切割字符串
使用代码如下:
1 // String的API使用 2 public class code2_useString { 3 public static void main(String[] args) { 4 String s1 = "ABC", s2 = "ABC", s3 = "abc"; 5 // equals equalsIgnoreCase 6 System.out.println(s1.equals(s2) + " " + s1.equals(s3) + " " 7 + s1.equalsIgnoreCase(s3)); 8 // startsWith endsWith 9 System.out.println(s1.startsWith("A") + " " + s1.endsWith("BC")); 10 System.out.println(s3.startsWith("A") + " " + s3.endsWith("BC")); 11 // length 12 System.out.println(s1.length()); 13 // charAt 14 for (int i = 0; i < s1.length(); i++) { 15 if (i != s1.length() - 1) { 16 System.out.print(s1.charAt(i) + "-"); 17 } else{ 18 System.out.print(s1.charAt(i)); 19 } 20 } 21 System.out.println(); 22 // subString 23 System.out.println(s1.substring(0)); 24 System.out.println(s1.substring(0, 1)); 25 System.out.println(s1.substring(1, 2)); 26 // indexOf 27 System.out.println(s1.indexOf("BC")); 28 System.out.println(s1.indexOf("不存在")); 29 // toLowerCase toUpperCase toCharArray 30 System.out.println(s1.toLowerCase()); 31 System.out.println(s3.toUpperCase()); 32 char[] chas = s1.toCharArray(); 33 // trim split 34 String str = "abc test 666"; 35 System.out.println(str.trim()); 36 String[] strs = str.split(" "); 37 for(int i=0;i<strs.length;i++){ 38 System.out.print(strs[i] + " "); 39 } 40 System.out.println(); 41 } 42 }
(2)数组
1 // Java数组使用 2 public class code3_useArray { 3 // print all elements of array 4 public static void printArray(int[] arr) { 5 if (arr == null) { 6 return; 7 } 8 for (int i = 0; i < arr.length; i++) { 9 System.out.print(arr[i] + " "); 10 } 11 System.out.println(); 12 } 13 14 // find the max value in arr 15 public static int findMax(int[] arr){ 16 int max = Integer.MIN_VALUE; 17 for(int i=0;i<arr.length;i++){ 18 max = Math.max(max, arr[i]); 19 } 20 return max; 21 } 22 23 // find the min value in arr 24 public static int findMin(int[] arr){ 25 int min = Integer.MAX_VALUE; 26 for(int i=0;i<arr.length;i++){ 27 min = Math.min(min, arr[i]); 28 } 29 return min; 30 } 31 32 public static void main(String[] args) { 33 // 声明数组并初始化(如果声明的时候不初始化默认每个位置初始化为0) 34 int[] arr = { 1, 2, 3, 4, 5 }; 35 // length 36 System.out.println(arr.length); 37 // 遍历数组 38 printArray(arr); 39 // 访问数组值 40 System.out.println(arr[0] + "-" + arr[1] + "-" + arr[2]); 41 // 找到数组最大值和最小值 42 System.out.println(findMax(arr)); 43 System.out.println(findMin(arr)); 44 } 45 }
(3)集合(ArrayList)(动态数组)
1 // ArrayList使用 2 public class code4_useArrayList { 3 public static void main(String[] args) { 4 // 创建ArrayList 5 ArrayList list = new ArrayList(); 6 7 // 添加元素 8 list.add("1"); 9 list.add("2"); 10 list.add("3"); 11 list.add("4"); 12 // 将下面的元素添加到第1个位置 13 list.add(0, "5"); 14 15 // 获取第一个元素 16 System.out.println("the first element is: " + list.get(0)); 17 18 // 删除"3" 19 list.remove("3"); 20 21 // 获取大小 22 System.out.println("Arraylist size=: " + list.size()); 23 24 // 判断包含 25 System.out.println("ArrayList contains 3 is: " + list.contains("3")); 26 27 // 设置第二个元素为10 28 list.set(1, "10"); 29 30 // 遍历ArrayList 31 for (Iterator iter = list.iterator(); iter.hasNext();) { 32 System.out.println("next is: " + iter.next()); 33 } 34 35 // 将ArrayList转换成数组 36 String[] arr = (String[]) list.toArray(new String[0]); 37 for (int i = 0; i < arr.length; i++) { 38 String str = arr[i]; 39 System.out.println("str: " + str); 40 } 41 42 // 清空ArrayList 43 list.clear(); 44 // 判空 45 System.out.println("ArrayList is empty: " + list.isEmpty()); 46 } 47 }
(4)Scanner(输入)
1 // Scanner使用 2 /* 3 next():只读取输入直到空格。它不能读两个由空格或符号隔开的单词。 4 此外,next()在读取输入后将光标放在同一行中。(next()只读空格之前的数据,并且光标指向本行) 5 6 nextLine():读取输入,包括单词之间的空格和除回车以外的所有符号(即。它读到行尾)。 7 读取输入后,nextLine()将光标定位在下一行。 8 9 * */ 10 public class code5_useScanner { 11 public static void main(String[] args) { 12 Scanner input = new Scanner(System.in); 13 System.out.println("a.请输入一个字符串(中间能加空格或符号)"); 14 String a = input.nextLine(); 15 16 System.out.println("b.请输入一个字符串(中间不能加空格或符号)"); 17 String b = input.next(); 18 19 System.out.println("c.请输入一个整数"); 20 int c; 21 c = input.nextInt(); 22 23 System.out.println("d.请输入一个double类型的小数"); 24 double d = input.nextDouble(); 25 26 System.out.println("e.请输入一个float类型的小数"); 27 float e = input.nextFloat(); 28 System.out.println("按顺序输出abcde的值:"); 29 System.out.println(a); 30 System.out.println(b); 31 System.out.println(c); 32 System.out.println(d); 33 System.out.println(e); 34 } 35 }
3、IO流及读写文件
(1)什么是输入输出流
- 输出流: 数据从Java程序到文件中
- 输入流: 数据从文件到Java程序中
(2)FileWriter和FileReader
- FileWriter:文件的字符输出流,写数据(字符、字符串、字符数组)
- FileReader:文件的字符输入流,读数据(字符、字符数组)
两者API如下:
1 FileWriter: 2 write(int ch); // 写一个字符(可以写字符的ASCII码值) 3 write(char[] chs); // 写一个字符数组 4 write(String s); // 写一个字符串 5 write(char[] chs,int startIndex,int len); // 写一个字符数组的一部分 6 write(String s,int startInex,int len); // 写一个字符串的一部分 7 8 FileReader: 9 int read(); // 读取一个字符 10 int read(char[] chs); // 一个读取一个字符数组,返回值表示实际读取到的字符的个数
(3)文件路径
- 相对路径:相对于当前工程或当前项目
- 绝对路径 :在计算机上的绝对位置(以盘符开头)
4、对象的内存图
(1)Java内存分类
- 栈stack:存基本数据类型和引用
- 堆heap:存对象(new出来的)
- 方法区:加载字节码文件(.class文件)
- 本地方法区:Java调用操作系统功能
- 寄存器区:Java操作CPU
- 注:上述区域中本地方法区和寄存器区基本上平时用不到
(2)Java内存示意图
5、this的作用及本质
- 作用:区分局部变量和成员变量的同名的情况(一般this.xxx就是指成员变量,没有this修饰的一般是局部变量)
- 本质:this代表一个对象,具体是哪一个对象,那么由方法的调用者决定
6、匿名对象
(1)什么是匿名对象
匿名对象:指没有名字的对象
语法上:只创建对象,而不是变量来接收
比如:new Dog(); new Student();
(2)匿名对象的使用
- 匿名对象也是一个对象,具有对象的所有功能
- 一个匿名对象只能使用一次,第二次使用就是一个新的匿名对象
1 public class Person{ 2 public void eat(){ 3 System.out.println(); 4 } 5 } 6 7 // 创建一个普通对象 8 Person p = new Person(); 9 // 创建一个匿名对象 10 new Person();
(3)匿名对象的特点
- 创建匿名对象直接使用,没有变量名:new Person().eat()
- 匿名对象在没有指定其引用变量时,只能使用一次
- 匿名对象可以作为方法接收的参数、方法返回值使用
1 class Demo { 2 publicstatic Person getPerson(){ 3 //普通方式 4 //Person p = new Person(); 5 //return p; 6 7 //匿名对象作为方法返回值 8 returnnew Person(); 9 } 10 11 publicstaticvoid method(Person p){} 12 } 13 14 class Test { 15 publicstaticvoid main(String[] args) { 16 //调用getPerson方法,得到一个Person对象 17 Person person = Demo.getPerson(); 18 19 //调用method方法 20 Demo.method(person); 21 //匿名对象作为方法接收的参数 22 Demo.method(new Person()); 23 } 24 }