一维数组实质上是相同类型变量的列表。要创建一个数组必须首先定义数组变量所需的类型。通用的一维数组的声明格式是:type var-name[ ];
数组中的元素必须类型相同,不能存储不同类型的元素,除非使用Object[]
可以通过数组的下标操作数组中所存储的元素,注意下标从0开始,例如arr[0]+=12;修改元素的值 System.out.println(arr[0]);获取元素
使用数组之前,必须先定义后使用,定义的方式: int[] arr或者int arr[]。
声明数组变量后,必须进行初始化操作,也就是定义数组的长度 arr=new int[5],这里表示开启可以存放5个int类型数据的数组,这些元素时连续存放的
简单类型的数组初始化长度后,每个元素都有默认值
System.out.println(“需要输出的内容”); 在显示器上打印输出指定内容,参数可以是任意类型的数据,但是事实上输出时是将数据自动转换为字符串进行输出
println表示输出完毕自动换行,下次输出在新行开始位置重新进行输出
print只是进行输出,输出完毕没有换行,下次输出后在本次输出的末尾继续输出
printf( String format, Object… args) 使用指定的格式字符串和参数将格式化的字符串写入该输出流的方便方法。
%d表示整数输出.例如System.out.printf(“score[%d] = %d\n”, i, score[i]); 将i, score[i]当做参数,输出时按照顺序替代格式字串中的%d
Scanner sc = new Scanner(System.in);
int i = sc.nextInt(); 如果没有输入整数,则会等待;如果输入的数据不能转换为整数则会有报错;如果输入多个整数以空格分开,则可以两次输入读取到。另有方法nextBigDecimal() /nextBigInteger() /nextBoolean() /nextByte() /nextDouble() /nextFloat() /nextLong() /nextShort()可以获取不同类型的用户输入数据,用于实现从键盘读取输入内容,并且自动进行数据类型转换,如果转换失败则报异常java.util.InputMismatchException。
使用System类别所提供的arraycopy()方法
int[] arr1 = {1, 2, 3, 4, 5}; int[] arr2 = new int[5];
System.arraycopy(arr1, 0, arr2, 0, arr1.length);参数含义为从arr1的第0个位置开始拷贝,拷贝到arr2的第0个位置开始,总共拷贝arr1.length个元素
Java.lang.System类的静态方法arraycopy(Object源数组,int起始下标,Object目标数组,int目标起始下标,int长度) 如果源数组数目超过目标数组边界会抛出IndexOutOfBoundsException异常
简单类型中不包含成员属性和成员方法,包装类就是简单类型的对象化封装,将简单类型可以转换为引用类型,从而具有对应的成员属性和成员方法。
针对简单类型的存储是直接使用内存中的栈
针对复杂类型的存储是使用栈存放对象的地址,具体的数据对象存放在堆中
在java中有四型八种的基本数据类型,每种对应的数据类型还有对应的包装类。
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
char | Character |
boolean | Boolean |
float | Float |
double | Double |
重点:
int parseInt(String s) 将字符串参数转换为带符号的十进制整数。
int parseInt(String s, int radix) 将字符串参数转换为一个符号整数,进制由第二个参数指定
应用场景:例如简单录入中next和nextline返回的都是string类型
valueOf(int i) 返回一个 Integer实例表示指定的int类型参数。
Integer valueOf(String s) 返回一个 Integer对象持有指定的String参数,将String类型的参数转换为Integer类型。
valueOf和parseInt的区别
自动装拆箱操作
int k=123; 正常的赋值
Integer k=123; 因为系统识别字面量123为简单类型,但是可以直接将简单类型的123赋值给对象类型的变量,因为系统支持自动装箱操作,也就是自动将简单类型的数据转换为引用类型
int bb=kk; kk是Integer类型的,但是系统允许直接赋值给简单类型的变量bb,因为系统支持自动拆箱操作
数值类型的父类为Number
所谓的数值类型是指存放具体数值数据的类型,例如int、double之类的数据。父类的含义是指数值型的包装类中含有Number类型定义的方法
int intValue()可以将任何数值类型数据转换为int类型数据:longValue() / floatValue() / doubleValue() / byteValue() / shortValue()
两个特殊数值类型的类BigInteger和BigDecimal,用于精确存储任意精度的数值型数据,(浮点类型double和float不能精确存放,整数类型实际上都有存储方位)并支持常见的加减乘除的方法。
因为参数中的数据系统识别为int类型,但是数据已经超出了int类型的上限。所以构建BigInteger或者BigDecimal时,参数必须是字符串类型,不能直接使用数据,否则会出现各种问题
使用Bigxxx执行效率低下。
int 和 Integer 有什么区别?谈谈 Integer 的值缓存范围
int是整形数字,是Java的8个原始数据类型(Primitive Types,boolean、byte、short、char、int、float、double、long)之一。Java 语言虽然号称一切都是对象,但原始数据类型是例外。
Integer是int对应的包装类,它有一个int类型的字段存储数据,并且提供了基本操作,比如数学运算、int和字符串之间转换等。在Java5中,引入了自动装箱和自动拆箱功能boxing/unboxing,Java可以根据上下文,自动进行转换,极大地简化了相关编程。
字符串实际属于类,不是简单类型,实际上所谓的字符串就是指一组字符的有序序列,可以使用双引号进行定义:
String s=”字串内容”;
字符串指的是字符的序列,有两种类型的字符串,可以使用3个不同的类进行定义。
一种是创建以后不需要改变的,称为字符串常量,在Java中String类用于存储和处理字符串常量
另外一种字符串是创建以后,需要对其进行改变的,称为字符串变量,在Java中StringBuilder/StringBuffer类用于存储和操作字符串变量。
String类型的基本使用
字符串在Java中以String类别的一个实例存在,不是简单类型,所以存放时有栈和堆之分。
不可变immutable字符串。含义是一个字符串对象一旦被配置,它的内容就是固定不可变的immutable,如果需要进行修改则会引发对象的新建。
==针对引用类型比较的是两个变量中存储的对象的地址值。
equals针对医用类型比较的是两个变量所指代具体对象中保存的值,是内容。
创建字串对象
new String()空的字符串常量,例如String s=new String();
new String(String value),例如String s=new String(“abcd”);
new String(char value[])例如char[] c=new char[]{‘a’,’b’}; String s=new String( c );实际上就是创建一个字符串”ab”.
字串的使用
字符串必须使用“”来包括您的文字,在Java中单双引号具有不同的含义,特别注意:单引号只能是char类型,其中包含一个字符或者使用\转义字符,属于简单类型,数据直接存储在栈中;双引号是String类型【注意S首字母大写】,属于引用类型,还有个特殊的常量池的问题。
=是进行赋值操作,== 比较【简单类型比较的就是直接的数据,引用类型比较的是地址】,没有 ===比较。
这里可以根据需要的计算方式进行合理的类型转换,类型转换可以使用前面的包装类中提供的方法: xxx.parseXxx,例如double类型Double.parseDouble,Integer类型的Integer.parserInt写法,如果转换失败则报错NumberFormatException。
字符串方法
length() 取得字符串的字符长度。
注意:数组中的length是属性,调用方法为arr.length。而String中的length是方法,调用方法为string.length()。
equals() 判断原字符串中的字符是否相等于指定字符串中的字符。
==针对复杂类型是比较两个对象的地址值,并不比较内容;equals是String中定义的方法,用于比较内容,而不是地址。
public boolean equals(Object anotherObject);equals重载Object类的方法,如果当前字符串与参数字符串完全相同,则返回真,否则返回假.不可用==比较字符串的字符内容是否相同。
使用+来串接字符串以达到附加新字符或字符串的目的,但+会产生一个新的String实例。不建议使用+来进行字符串的串接,建议使用StringBuilder或者StringBuffer。
字符串中子串的查找
int indexOf(String str)从左向右开始查找str的起始下标,如果查找不到返回-1;
int indexOf(String str, int fromIndex)从指定下标位置fromInde开始左向右查找str的下标。
int lastIndexOf(String str)从右向左开始查找str的起始下标;
int lastIndexOf(String str, int fromIndex)从指定下标位置fromInde开始右向左查找str的下标。
substring(int):String 获取字符串从int下标位置开始到字符串结尾为止的所有内容,包含int位置上的字符;
substring(int起始下标, int 终止下标):String获取字符串从int下标位置开始到第二个int结尾为止的所有内容,含左不含右。
Java的StringBuffer和StringBuilder类
和String类不同的是,StringBuffer和StringBuilder类的对象能够被多次的修改且不产生新对象,就是原地操作。
StringBuilder类在Java 5中被提出,它和StringBuffer间的最大不同在于StringBuilder的方法不是线程安全的(不能同步访问)。由于StringBuilder相较于StringBuffer有速度优势,所以多数情况下建议使用StringBuilder类。然而在应用程序要求线程安全的情况下,则必须使用StringBuffer类。
StringBuffer类支持的主要方法:
StringBuffer append(String s)将指定的字符串追加到此字符序列。
StringBuffer reverse()将此字符序列用其反转形式取代。
Random类中实现的随机算法是伪随机,也就是有规则的随机。在进行随机数计算时,随机算法的起源数字【参数】称为种子数seed,在种子数的基础上进行一定的变换,从而产生需要的随机数字。
创建随机对象
new Random()构造方法使用一个和当前系统时间对应的相对时间有关的数字作为种子数,然后使用这个种子数构造Random对象。
boolean·nextBoolean()方法的作用是生成一个随机的boolean值,生成true和false的值几率相等,也就是都是50%的几率
double·nextDouble()方法的作用是生成一个随机的double值,数值介于[0,1.0)之间。
int nextInt()该方法的作用是生成一个随机的int值,该值介于int的区间,也就是2e9之间。
int nextInt(int n)方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。
Math.abs 求绝对值,典型使用场景就是浮点数的等值判定问题
Math.round 四舍五入返回int型或者long型