黑马程序员技术交流社区
标题:
JavaSE基础知识总结
[打印本页]
作者:
liweihao5253
时间:
2019-7-24 14:39
标题:
JavaSE基础知识总结
常见的CMD命令行:dir:显示当前目录文件列表cd: 进入该目录Tab键:循环自动补充该目录下的文件名,加shift键可以倒序遍历,使用的时候可以只输入前几个字母,剩下的按Tab键自动补充..: 指上一级目录四类八种变量转换问题使用常量给变量赋值时,如果常量为整数,则编译器默认将常量编译成整数再赋值,如果常量带有小数点,则自动编译成double。int number = 3200000000L;double number = 4000000000D;float number = 30.5F;常见的范围数据类型关键字内存占用取值范围字节byte1负的2的7次方 ~ 2的7次方-1(-128~127)短整型short2负的2的15次方 ~ 2的15次方-1(-32768~32767)整数int4负的2的31次方 ~ 2的31次方-1长整型long8负的2的63次方 ~ 2的63次方-1浮点数float41.401298e-45 ~ 3.402823e+38双精度double84.9000000e-324 ~ 1.797693e+308字符char20-65535右侧赋值给左侧必须强制类型转换,否则会报错强制类型转换可以按图逆行,避免报错可以给char直接赋值范围内的整数常量,这是jvm的优化功能整数的除法”/“”只有商,想得到精确值需要转换成double类型。算数类型的变量在计算时会自动转换成int,如果有小数点参与,则自动转换成double。常用的ASCII码:'0' -- 48'A' -- 65'a' -- 97强制类型转换之后如果依然超出范围,不会报错,但是会从头开始计数,如果超上限会从下限开始计数,如果超下限会从上限开始计数。自增运算符(做题一定要注意)自增运算符会自动强制类型转换,不用担心报错自增运算符参与运算的情况: ++i代表自增优先,先做自增运算,再参与程序运行 i++代表程序优先,先参与程序运行,再进行自增例如: int l = 10; int y = ++l + l++ + ++l; System.out.println(y);输出:35switch下的case可以不写breakswitch只在两种情况下跳出:①执行完switch方法体最后一行。②遇到break关键字。数组数组的静态初始化:int[] a = new int[]{1,2,3,4,5};int[] b = {1,2,3,4,5};这两种写法虽然都是静态初始化,但是依然有区别!第一种可以分开写,第二种只能在定义的同时初始化,不能分开写!数组内存图:方法void类型方法体中也可以写return,这不是错误的写法,后面什么都不加,一般情况下省略return给main方法传参方法一:控制台传参数:多个参数用空格隔开方法二:在ideal里面配置同样参数之间用空额隔开内存图补充:方法是在栈当中进行的,满足先进后出、后进先出的执行顺序。面向对象三大特征:封装、继承、多态权限修饰符一览图:Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。
* default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
* private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
* public : 对所有类可见。使用对象:类、接口、变量、方法。
* protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
注意:只有public和default(即什么都不写)可以用来修饰类。说明:default=包内可见,只跟包有关,本包能访问,外包任何类不能访问protected在包内可见的基础上开放了外包子类访问继承方法,在外包子类中直接访问父类实例方法依然是不行的。关于重写:被权限修饰符修饰的方法可以被子类重写(final除外),重写时权限只能扩大不能缩小!(和多态机制有关)static修饰符:static修饰符只能用来修饰类成员变量和类方法。final修饰符:final只能用来修饰类、成员变量/局部变量、类方法。abstract修饰符:abstract只能用来修饰类、和方法。API(Application Programming Interface):应用程序编程接口String类特点
* 不可变
* 可共享
* 底层采用字节数组存储
String构造方法:byte[] b = new byte[] {22,11,43,127};char[] c = new char[] {'a','b','c'};String s = "HelloWorld";String s1 = new String(b); //new的时候参考b的内容,并将b的内容复制进新的String对象中String s2 = new String(c);String s3 = new String(s);//new出来的字符串对象在内存中是不同的副本总结:new出来的String对象会产生新的副本String对象内存图:String常用方法:boolean equals(Object anObject) //判断指定对象和此字符串内容是否相同char charAt(int index) //返回指定索引的单字符int indexOf(int ch)int indexOf(String str)int length() //返回字符串长度String[] split(String regex) //按照指定的分隔符分隔字符串并返回字符串数组String subString(int beginIndex)String subString(int beginIndex,int endIndex)char[] toCharArray() //将此字符串转成一个字符数组String trim() //返回一个去掉前后空格的字符串String valueOf(int i) //将其他类型转成字符串类型 ... ==符号实际上是比较栈当中的数据是否相同单字符是可以直接进行比较大小的,例如'A'<56StringBuilder类 ——可变长度的字符序列构造方法:StringBuilder sb = new StringBuilder();StringBuilder sb2 = new StringBuilder("hello");String s = "helloWorld";StringBuilder sb3 = new StringBuilder(s); //String转成StringBuilder常用方法:sb.append(""); //此方法返回的是StringBuilder自身,因此可以链式编程sb.append("I").append("love").append("programming");sb.reverse(); //将此字符序列反转,返回其自身sb.toString(); //StringBuilder转字符串总结:String和StringBuilder在API方法上的异常:由于String是不可变字符串,方法的返回值往往是新的String副本,因此需要将方法返回值重新赋值而StringBuilder是可变字符序列,因此返回值经常是它自身,不需要另外赋值,也因此可以实现连式编程在使用的时候要注意二者的区别利用Scanner接收并返回的String要注意Scanner sc = new Scanner(System.in);String str1 = sc.next(); //从键盘中键入 你好String str2 = "你好";System.out.println(str1 == str2); //falseSystem.out.println(str1.equals(str2)); //true关于Scannersc.nextLine();不能放在sc.nextInt();代码段后面否则sc.nextLine();会读入"\n"字符,但"\n"并不会成为返回的字符
* next();这个函数会扫描从有效字符起到空格,Tab,回车等结束字符之间的内容并作为String返回。
* nextLine();这个函数在你输入完一些东西之后按下回车则视为输入结束,输入的内容将被作为String返回。
* next();这个函数与之不同在于,next();什么都不输入直接敲回车不会返回,而nextLine()即使不输入东西直接敲回车也会返回。
ArrayList集合
解决遍历删除的安全性问题
方法①:倒序遍历
方法②:每次删除后i--
方法③:使用iteritor对象
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2