标识符
Java 的标识符是由字母、数字、下划线_、以及美元符$组成,但是首字母不可以是数字。Java 标识符大小写敏感,长度无限制,不能是 Java 中的关键字。命名规则:要见名知意!
u 变量要首字母小写和驼峰原则;
u 常量的单词字母要全部大写,若有两个以上的单词组成,就用下划线"_"进行连接;
u 类名要首字母大写和驼峰原则;
u 方法名要首字母小写和驼峰原则,如showRun()
变量
通过变量来操纵存储空间的数据,变量就指代这个存储空间。空间的位置是确定的,但是里面存放的值不确定。
局部变量 | 存在于栈内存的方法中,生命周期伴随所属区域始终,使用前必须先声明和初始化 |
成员变量 (实例变量) | 存在于堆内存的对象中,从属对象,生命周期伴随对象始终,自动初始化、有默认初始值 |
静态变量 (类变量) | 存在于方法区,用static修饰,从属类,生命周期伴随类始终,自动初始化、有默认初始值 |
数据类型
1.分类
基本数据类型:逻辑型、文本型(char)、数值型
byte(1字节)、short(2)、int(4)、long(8)、float(4)、double(8)
引用数据类型:类、接口、数组
大小统一是4字节,记录的是其引用对象的地址!
注意:
u 实际上还有一种基本数据类型:void,其对应的包装类是:java.lang.Void
u Java 中迚行方法调用传递参数时,基本数据类型传递的是该数据值本身,引用数据类型传递的是对对象的引用——地址,而不是对象本身;Java 中只有值传递!
u 转义字符:\n换行 \r回车 \f换页 \’引号 \\反斜杠号
2.基本数据类型对象包装类
基本数据类型都有自己对应的包装类:byte Byte;short Short;int Integer;long Long;boolean Boolean;float Float;double Double;char Character
基本数据类型存储在栈内存中,而它们对应包装类的实例对象存储在栈内存中。
基本数据类型对象包装类的最常见作用,就是基本数据类型和字符串类型之间做转换
(1)基本数据类型转成字符串:基本数据类型+""或基本数据类型.toString(基本数据类型值);
Integer.toString(34);//将34整数变成"34";
(2)字符串转成基本数据类型:xxx a = Xxx.parseXxx(String);
int a =Integer.parseInt("123");
double b = Double.parseDouble("12.23");
boolean b =Boolean.parseBoolean("true");
//或者可以写成
Integer i = newInteger("123"); int num =i.intValue();
还可以进行进制之间的互换:
(1)十进制转成其他进制:toBinaryString();二 toOctalString();八 toHexString();十六
(2)其他进制转成十进制:arseInt(string,radix);//其中,radix=2,8,16
JDK1.5以后,简化了定义方式:Integer x = new Integer(4);可以直接写成
Integer x = 4;//自动装箱 x = x + 5;//自动拆箱,通过intValue方法。
注意:
u 使用时,如果写成Integerx = null;上面的代码就会出现NullPointerException;
u 定义对象时,当数值在byte范围内容,如果该数值已经存在,则不会在开辟新的空间;
u 对于数值型的取值范围,它们都以常量的形式义在对应的包装类中了。
System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
System.out.println("包装类:java.lang.Byte");
System.out.println("最小值:Byte.MIN_VALUE="+ Byte.MIN_VALUE);
System.out.println("最大值:Byte.MAX_VALUE="+ Byte.MAX_VALUE);
// 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台
System.out.println("最小值:Character.MIN_VALUE="+(int) Character.MIN_VALUE);
System.out.println("最大值:Character.MAX_VALUE="+(int) Character.MAX_VALUE);
数组
数组是相同类型数据的集合。它的长度固定,一旦创建完成后长度是不可改变的。Java允许创建任何类型的数组,而数组的大小是int型变量,其值是非负数。
1.数组的内存结构
2.赋值与复制
(1)赋值(必须是类型相同的):可以让多个数组变量指向同一个数组。
int[ ]arrs=arr;
(2)复制:通过clone()方法,其实新建了一个数组
int[ ] cloneArr=(int[ ])arr.clone( );
注意:当数组类型是类(非基本数据类型)时,调用clone( )方法,复制的是数组的内容即引用,并没有复制引用指向的对象。
3.几种常见操作
(1)排序
选择排序法:从头角标对应的元素开始,和每个元素进行一次比较。第一次内循环后,最值出现在头角标位置
for (int x=0;x<arr.length-1 ; x++){
for(int y=x+1; y<arr.length; y++){
if(arr[x]>arr[y]){
swap(arr,x,y);}}}
冒泡排序:相邻两个元素以此比较,符合条件就调换顺序。第一次内循环后,最值出现在未角标位置
for(int x=0;x<arr.length-1; x++){
for(int y=0; y<arr.length-x-1; y++){//-x:让每一次比较的元素减少,-1:避免角标越界。
if(arr[y]<arr[y+1]){
swap(arr,y,y+1);}}}
(2)折半查找
public static inthalfSearch (int[] arr,int key){
int min = 0,max =arr.length-1,mid;
while(min<=max){
mid = (max+min)/2;
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid - 1;
else
return mid;
}
return -1;}}// 如果要想实现在一个有序的数组里面加入一个元素,要求加入后数组里面的元素任然有有序的。此处应该改成return min
4.二维数组
格式1:int[][] arr = new int[3][2]
l 定义了名称为arr的二维数组
l 二维数组中有3个一维数组,每一个一维数组中有2个元素
l 一维数组的名称分别为arr[0],arr[1], arr[2]
l 给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;
格式2:int[][] arr = new int[3][];
l 二维数组中有3个一维数组,每个一维数组都是默认初始化值null
l 可以对这个三个一维数组分别进行初始化:
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];
格式3:int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};
l 二维数组中的有三个一维数组,每一个一维数组中具体元素也都已初始化
第一个一维数组arr[0] = {3,8,2};
第二个一维数组arr[1] = {2,7};
第三个一维数组arr[2] = {9,0,1,6};
l 第三个一维数组的长度表示方式:arr[2].length;
多维数组:由一级级的一维数组组成,是数组的数组。除了最后一层数组由数组元素组成,其余的数组都是数组变量的数组。
键盘输入方法
1.接收一个字符:System.in.read();
char c=(char)System.in.read();
2.接收一个字符串:BufferedRead类和InputStreamReader类
BufferedReaderbr=new BufferedReader(new InputStreamReader(System.in));
Stringc=br.readLine();
3.接受任意数据:Scanner类
Scanner s=new Scanner(System.in); System.out.println("请输入你的姓名:"); String name=s.nextLine(); System.out.println("请输入你的年龄:"); int age=s.nextInt(); System.out.println("请输入你的工资:"); float salary=s.nextFloat(); | Scanner s=new Scanner(System.in); System.out.println("请输入你的年龄:"); int age=s.nextInt(); System.out.println("请输入你的姓名:"); String name=s.next(); System.out.println("请输入你的工资:"); float salary=s.nextFloat(); |
next()和nextLine()的区别:
在java中,next()方法是不接收空格的,在接收到有效数据前,所有的空格或者tab键等输入被忽略,若有有效数据,则遇到这些键退出。nextLine()可以接收空格或者tab键,其输入应该以enter键结束。
访问控制符
使用访问权限符修饰方法/成员变量的可见性
访问控制符 | 本类 | 同一个包中的类 | 子类 | 不同包中的类 |
public | √ | √ | √ | √ |
protected | √ | √ | √ | ╳ |
默认 | √ | √ | ╳ | ╳ |
private | √ | ╳ | ╳ | ╳ |
并不是绝对的,如果同时满足两个条件,要以前面的为主要标准。例如,对于A类中用protected修饰的方法test,异包中的B类继承A类,此时可以看成B是A的子类。对于默认访问权限符修饰的类,如果子类和父类在同一个包中,那么它对子类仍然可见。
跳转语句
break | 结束其所在的循环而不进入下一轮循环;如果有循环嵌套则不会终止外部循环 |
continue | 结束当次循环,继续进行下一轮循环 |
return | 返回数据,终止运行 |