Java基础知识(一)
1、Java中从键盘读取输入,输入都看成是字符串;
利用类Scanner的方法next()就能获取输入的内容(不管输入什么),而nextInt()方法用来获得输入是整数的,其间,是将输入的字符串内容转成了int才输出的;
2、Java中如何导包:
import 包路径.类名称;
只有Java.lang包下的内容不需要导包;
如果要使用的类和当前的类在同一个包下,则不需要导入包;
3、匿名对象(参考匿名函数)
匿名对象:就是只有右边的对象,没有左边的名字和赋值运算符;即:new 类名称();
匿名对象只能使用唯一一次,下次再用不得不创建新的对象;(使用建议:如果有对象只需要使用一次,就可以使用匿名对象)
标准的创建对象的语句:类名 对象名字=new 类名();( 其实是创建了一个对象然后将该对象的地址给了左边,而匿名对象的地址没有其他人,也就是不能再使用第二次了,可以理解为第二次找不着了)
匿名对象可以用来简化创建对象并调用方法的语句、当作传递的参数、当作返回值;
比如:
(1)int sum1=new Scanner(System.in).nextInt();
System.out.println(sum1);
(2)public static void methodParam(Scanner sc){...}
methodParam(new Scanner(System.in));
(3)public static Scanner methodReturn(){return new Scanner(System.in);}
4、字符串String
4.1String是个类,是在java.lang路径下的,这也就是为什么可以在声明字符串时候直接String,因为默认不用导包;
4.2Java程序中所有的字符串的字面值(如:“ABC”),都作为此类的实例实现。也就是程序中所有双引号字符串,都是String类的对象(就算没有new,也照样是)。
4.3字符串的特点:
1、字符串的内容永不可变;(字符串是常量)
2、正是因为字符串不可改变,所以字符串可以被共享使用(共享使用可以节省内存);
3、字符串的效果上相当于char[]型字符数组,但是底层原理是byte[]字节数组;
4.4 创建字符串的常见方式(3种构造方法和1种直接创建):
public String(); 创建一个空白的字符串,不含有任何内容。 String str=new String();
public String(char[] array); 根据字符数组的内容,创建对应的字符串。(相当于将字符数组中的字符串起来,就是字符串)
char[] charArray={'A','B','C'};String str2=new String(charArray);
public String (byte[] array); 根据字节数组的内容,来创建对应的字符串。
byte[] byteArray={97,98,99}; String str3=new String(byteArray);
直接创建:String str="hello";(这同样是字符串的对象)
java 中定义一个字符串和字符串数组分别为:String a=new String(); String[] str=new String[]{"a","bb","c"};
4.5字符串的常量池(只有双引号直接写创建的String才在字符串常量池中,new的不在池中):
对于基本数据类型来说,==是进行数值的比较;
对于引用类型来说,==是进行地址值的比较;(在创建对象的时候,右边是对象,左边是名字,名字其实就是一个保存了对象地址的变量)
例子(解释如图1):
String str1="abc";
String str2="abc";
char[] charArray={'a','b','c'};
String str3=new String(charArray);
System.out.println(str1==str2); //true
System.out.println(str1==str3); //false
从JDK1.7开始,字符串常量池在堆当中

4.6 字符串的使用方法(每当觉得字符串的值发生了改变,其实都是创建了一个新的字符串):
4.6.1 字符串的比较的相关方法:
“==”进行的是对象的地址值的比较,如果一定要比较对象的内容,可以使用两种方法:
public booleanequals(Object obj);//只有参数是一个字符串,而且内容相同的才会返回值true,否则返回false,而且严格区分大小写;
(注意事项:1、Object可以用来接收任何对象;2、equals方法具有对称性,也就是a.equals(b)与b.equals(a)的效果是一样的;3、如果比较的双方一个是常量一个是变量,推荐将常量字符串写在前面,也就是推荐:"abc".equals(str);不推荐:str.equals("abc");,因为如果str是null的时候,程序就会报错。)所有的引用类型都可以设置成null;
puclic boolean equalsIgnoreCase(String str); //忽略大小写,进行内容比较;
4.6.2字符串的获取的相关方法:
public int length(); //获得字符串当中含有的字符个数,拿到字符串的长度;
public String concat(String str);//将当前字符串与参数字符串拼接成为(创建)新的字符串(不会影响原来的两个字符串,三个相互独立)并作为返回值返回;
public charcharAt(int index); //获得指定索引位置的单个字符;(索引从0开始)
public int indexOf(String str); //查找参数字符串在本字符串当中首次出现的索引位置并返回,如果没有查找到就返回-1值;
4.6.3字符串中的截取方法:
public String substring(int index); //截取从参数位置一直到字符串末尾,返回截取的字符串;
public String substring(int begin,int end);//截取从begin开始一直到end结束中间的字符串(注意:[begin,end),包含左边不包含右边)
注意: String str="ABC";
System.out.println(str);
String str="eds"
System.out.println(str);
上面的代码,字符串的内容仍然是没有改变的,str中保存的是地址值,本来保存的是“ABC”的地址值,后来保存的是“eds”的地址值;
4.6.4字符串的与转换的相关方法:
public char[] toCharArray(); //将当前字符串转换成字符数组并作为返回值;
public byte[] getBytes(); //获得当前字符串的底层的字节数组;
public String replace(CharSequence oldString,CharSequence newString);//将所有的出现的老字符串替换成新的字符串,返回新的字符串;charSequence意思就是可以接受字符串类型;
4.6.5字符串的与分割相关的方法:
public String[] split(String regex); //按照参数的规则,将字符串切分为几个部分。
split方法的参数其实是一个正则表达式;如果要用.来切分,必须写成"\\.";
5、工具类
5.1
java.util.Arrays是一个与数组相关的工具类,里面提供了大量的静态方法,用来实现数组的相关操作;
public static StringtoString(数组);将参数数组变成字符串(按照默认格式:元素1,元素2,元素3,。。。); Arrays.toString(数组);
比如:int[] charArray={4,3,1,5,6,2};
System.out.println(Arrays.toString(charArray));
System.out.println(charArray);
结果为:[1, 2, 3, 4, 5, 6] [I@61bbe9ba
public static void sort(数组);按照默认升序对数组进行排序; Arrays.sort(数组);
sort方法注意事项:1、如果数组中是数值,默认从小到大排序;2、如果是字符串,sort默认按照字母升序;3、如果是自定义的类型,那么这个自定义的类需要Comparable或者Comparator接口的支持;
5.2 Math工具类:
public static double abs(double num); //获得绝对值,有多种重载;
public static double ceil(double num); //向上取整(结果会带小数点,比如30.0)
public static double floor(double num); //向下取整(结果会带小数点,比如30.0)
public static long round(double num); //四舍五入 (结果不带小数点)
5.3 Random类:
import java.util.Random;
Random r=new Random();
System.out.println(r.nextInt()); //nextInt()获取的是一个随机的Int数,范围是Int的所有范围,有正负。 nextInt(a) //这表示生成在区间范围[0,a)的随机数;
6、数组
任何数据类型都可以作为数组当中元素的类型(比如:基本数据类型、字符串、类对象等);
数组有一个缺点,一旦创建,程序运行期间长度不能改变;
Person[] array=new Person[3]; Person one =new Person("name",age); array[0]=one;...
7、 ArrayList集合类
ArrayList集合的长度是可以改变的,数组的长度是不可以改变的;
创建ArrayList时候,需要指定泛型即指定ArrayList其中E的值,注意泛型的值不能是基本类型,只能是引用类型(集合中保存的都是地址值,而基本类型没有地址值)。
如果希望向ArrayList存储基本数据类型,必须使用基本数据类型对应的“包装类”(从JDK1.5开始,支持自动装箱【基本类型——>包装类型】、自动拆箱【包装类型——>基本类型】);
常见的方法:(查阅API文档)
对象名.add();
public E get(int index); //从ArrayList中获取元素(注意是获取,意思是元素还呆在原来数组中),参数是索引,返回对应位置的元素;
public E remove(int index); //删除掉对应索引位置的元素,返回值是被删除掉的元素;
public int size();//返回的是集合的长度,即集合中有多少个元素;
备注:从JDK1.7开始,右侧的尖括号中的内容可以不写,但是尖括号本身还是要写的。
对于ArrayList来说,直接打印得到的不是地址值而是内容,如果内容是空,那么得到的是空的中括号[];