- 数据类型初阶
- 基本数据类型的包装类
- 整数类型&浮点类型&字符类型
- 大小类型转换
- 通过Scanner从控制台获取数据
- 变量相关基础算法
- Java的错误类型
字符串String
补充-Package
一、数据类型初阶
- 栈空间(Stack)
1.存取效率高,存储空间小
2.JVM将基本数据类型存储于Stack堆空间(Heap)
1.存取效率较低,存储空间大() 2.类型:数组、字符串、对象 3.存放位置随机分配字面量:
Java的变量和变量中存放的具体的数据称为字面量,eg.常量驼峰命名法:
sumScore
二、基本数据类型的包装类
eg.Interger类
1.封装了实用的方法和常量int Integer.parseInt(String SInteger);//将String类型的整数转换成int类型 //parse:解析
2.在集合中用来定义集合元素的类型 三、整数类型
1.java底层byte和short按照32位(int类型)计算
byte b1 = 5; //error:byte b2 = b1+3; //b1+3 default ——>int byte b2 = (byte) b1 +3 ; //right int b2 = b1+3;
四、浮点类型
1.Defalut result = Double;
字面量结果double//Examplefloat f = 5.3; //Error:float f = 5.3f;//Ok
2.精度:小数是以尾数长度来表示精度的。
eg.pi = 3.1415 的精度是4 3.结果为近似,有误差五、字符类型
Java底层使用Unicode编码的一部分,1个char 16 bit (即2 bytes)
六、类型转换
小类型——>大类型
1.自动类型转换,由JVM负责,隐式类型转换
2.规则:符号位自动拓展,负数补1,正数补0 3.小类型向大类型转换一般是安全的,当小类型的精度高于大类型时要注意精度丢失的隐患//int——>float 丢失精度//float 尾数精度23位 int i = 0x1000001;//7位*4(16进制与2进制1比4转换) 28位二进制 float f = i; System.out.println(Integer.toBinaryString(i)+":"+i); System.out.println(Integer.toBinaryString((int) f)+":"+f);
大类型——>小类型
1.强制类型转换(显式)2.边界数风险(数据位成为符号位或大类型的数据超过小类型的位数)
通过args数组获取数据
- 通过main方法的args数组可以从控制台获取一组字符串数据
配置 Run Configurations New->Arguments->program arguments 中的值作为 args[] 的参数传入
七、通过Scanner从控制台获取数据
1.Scanner类位于java.util.Scanner包中,用于扫描从控制台输入的数据,可以接受字符串和基本数据类型的数据。
String next(); //接收从控制台输入的一个字符串,End with Space or Enter String nextLine(); //可接收空格,End with Enter int nextInt(); //接收从控制台输入的一个int类型的数据
2.输入char类型的数据
char String.charAt(int index); //从字符串中获取指定下标的字符,下标从0开始 "abc".charAt(0)的值为a; char name = scanner.next().charAt(0); //从控制台输入中取第一个字符
- 使用步骤 Scanner scanner = new Scanner(System.in);//创建Scanner类的一个对象 System.out.println("Name:"); String name = scanner.next(); //通过scanner调用next等方法,接收控制台输入的数据
八、变量相关算法
自增、自减、自乘和自除
int i = 1; System.out.println(++i);//先加1,再输出
互换两个变量值的算法
- 解法1 中间变量
int a = 100; int b = 50; int c = a; a = b; b = c;
- 解法2 不借助中间变量,仅在两个变量之间交换值
int a = 100; int b = 50; a = a+b; //result: a = a+b; b= b; b = a-b; //result: a = a+b; b= a; a = a-b; //result: a = b; b= a;
九、Java的错误类型
- 编译用法错误
- 运行异常错误
- 运行逻辑错误
十、字符串String
10.1 String字符串
- 实例化String对象
String str1 = "Hello"; //直接赋值,更优 String str2 = new String("Hello");//使用关键字new,开辟了两片内存
2.内容比较
String str1 = "Hello"; //直接赋值,更优 String str2 = new String("Hello"); //使用关键字new,开辟了两片内存 System.out.println(str1 == str2) //OUTPUT:false System.out.println(str1.equals( str2 )) //OUTPUT:false
"==" ——>地址比较"equals"方法——>内容比较
注:字符串操作尽可能多使用封装函数
3.String字符串内容不可更改public static void tell(String s){ s = "I love coding."; } public static void main(String[] args) { String str = "Hello"; System.out.println(str.toString()); tell(str); System.out.println(str.toString()); } } OUTPUT: Hello Hello
String str = "hello" str = str + "world";
改变的而是堆内存地址的指向,原内容暂时未被释放
注:每次String更改内容,其本质是开辟了新的内存空间,耗资源,不提倡,应改用
StringBuffer操作类10.2 String字符串常用方法
//1.字符串长度length() String str = "helloworld@" System.out.println(str.length()); //2.字符串转化为数组toCharArray() char data[] = str.toCharArray(); for (int i = 0;i < data.length;i++) { System.out.print(data[i]+" "); } OUTPUT:h e l l o w o r l d @ //3.从字符串中取出指定位置的字符 charAt() System.out.println(str.charAt(7)); OUTPUT: r //第八个字符 ,由于从0开始计数 //4.过滤字符串中存在的字符 indexOf() str.indexOf("@"); OUTPUT:11 //查找并返回位置 //5.去掉字符串中的空格:trim() //6.从字符串中取出子字符串:subString() //7.大小写转换:toLowerCase() toUpperCase(); //8.判断字符串的开头结尾字符:endsWith() startWith() //9.替换字符串中的一个字符: replace()
10.3 StringBuffer操作类
1.StringBuffer缓冲区可以被更改(区别于String)```java public static void tell(StringBuffer s){ s.append(" I love coding.");}public static void main(String[] args) { StringBuffer buffer = new StringBuffer(); buffer.append("helloword"); //追加内容 System.out.println(buffer.toString()); tell(buffer); System.out.println(buffer.toString());} }OUTPUT: helloword helloword I love coding.```2.StringBuffer常用方法 ```javabuffer.append("Coding");//追加buffer.insert(0,"I love");//从第0个位置开始插入buffer.replace(start,end,"替代内容");```
10.4 StringBuilder
一个可变的字符序列,作为StringBuffer的一个简单替换,用在字符串缓冲区被单个线程使用的时候,效率比StringBuffer高
涉及到线程安全——>建议用StringBuffer
补充
Package
Java中的一个包就是一个类库单元,包内包含有一组类,它们在单一的名称空间之下被组织在了一起。这个名称空间就是包名。