1.Java中的基本数据类型有八种:byte,short,int,long,float,double,char,boolean
引用类型:除基本数据类型和null以外的其他数据类型:String,数组,类,接口…
2.类型转换:
自动类型转换——1,数据类型要兼容。
2目标类型要大于源类型
强制类型转换
3.Scanner类在java.util.Scanner包内. Scanner scanner=new Scanner(System.in)
4.运算符:
算数运算符:+,-,*,/,%,++,–
赋值运算符:=,+=,-=,*=,/=
关系运算符:>,<.<=,>=,!=,==
逻辑运算符:&&,||,!
条件运算符(三目运算符): 条件?表达式1:表达式2
位运算符:&(按位与),|(按位或),~(按位非),^(异或),>>(右移),<<(左移),>>>(无符号右移)
//二进制为 00000000 00000000 00000000 00000101
int a=5;
//二进制为 00000000 00000000 00000000 00001000
int b=8;
//与:两位都为1,则为1,否则为0,00000000
System.out.println(a&b);
//或:只要有一个1,则为1,否则为0,00001101
System.out.println(a|b);
//非:如果为1,则为0,如果为1,则为 11111111 11111111 11111111 11111010
System.out.println(~a);
//异或:如果两位相同,则为0,否则为1,00001101
System.out.println(a^b);
//左移:将所有位都向左移指定位数,末尾补0
System.out.println(a<<2);
//右移:将所有位都向右移指定位数,高位补符号位
System.out.println(a>>2);
//无符号位右移:将所有位都向右移指定位数,高位补0
System.out.println(a>>>2);
输出:
0
13
-6
13
20
1
1
上面~a输出-6的原因是 计算机内部是使用补码来存储和表示值的,因此:
原码:11111111 11111111 11111111 11111010 (原码为第一位为符号位0正数,1负数,剩下31位为二进制数)
反码:10000000 00000000 00000000 00000101 (反码除符号位不变外,负数每一位都取反)
补码:10000000 00000000 00000000 00000110 (补码在反码的基础上+1)
(正数的原码,反码,补码都是一样的,只考虑负数的特殊形式)
循环控制:
break:跳出整个循环,执行循环之后的代码,一般与if一起使用
continue:跳出本次循环,执行下一次循环,本次循环尚未执行完的代码不再执行
递归:
方法自己调用自己,称为递归,该方法称为递归方法
数组:数组是用来存储相同数据类型的一组数据
声明一个数组就是在内存中划出一串连续的空间
数组中的元素是有默认值的,(局部变量没有默认值)
ArrayIndexOutOfBoundsException 数组下标越界异常
数据存储方式:
1.内存分类:栈内存,堆内存
区别:1,栈的存取速度比堆要快。 2,栈内存要小于堆内存
2.成员变量的基本数据类型在内存中的存储:直接将值存储在栈中
3.成员变量的引用类型在内存中的存储:在栈中存储在堆中的内存地址
冒泡排序:
原理:依次比较相邻的两个元素,如果顺序错误就交换位置
public static int[] bubbleSort(int[] array){
for (int i = 0; i < array.length-1; i++) {
for (int j = 0; j < array.length-i-1; j++) {
if(array[j]>array[j+1]){
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
return array;
}
Arrays工具类:
java.util.Arrays类提供了操作数组的方法:
.toString(),将数组返回字符串
.sort() 排序
.fill() 填充
不定长参数: 数据类型… 表示不定长参数
特点:只能是方法的最后一个参数
调用方法时参数的个数任意
一个方法最多只有一个不定长参数
本质上就是一种特殊的数组,只能作为方法的形参使用
面向对象——是一种程序的设计范型,是一种思想,使用类和对象的概念进行程序设计
类:一个文件中可以定义多个类,但只能有一个public修饰的类,且此类的名称必须与文件名相同
全局变量和局部变量
全局变量:在类中定义的变量,称为全局变量,可以在整个类中使用,有默认值
局部变量:除全局变量以外的其他变量,只能在局部访问,没有默认值,必须赋值才能使用
局部变量和全局变量同名,局部变量的优先级更高,即默认访问的是局部变量
this表示当前类的一个对象
只能在类的方法中使用,表示方式的调用者,即调用该方法的对象
当局部变量和全局变量同名时,可以使用this.来访问全局变量
static关键字——static表示静态的,可以用来修饰变量和方法
静态变量——用static修饰的变量,称为静态变量或类变量(非static修饰的变量称为实例变量)
静态变量为类的所有对象所共有,属于整个类
访问方式:对象名.属性名 或 类名.属性名 (推荐)
静态方法——用static修饰的方法,称为静态方法或类方法(非static修饰的方法称为实例方法)
访问方式:对象名.方法名() 或类名.方法名()(推荐)
静态方法中只能访问静态变量或静态方法,不能访问实例变量和方法
方法重载
一个类中包含两个或两个以上同名的方法,其参数不同,称为方法重载(overload)
注意:在同一个类,方法名相同,参数列表不同(参数个数,类型,顺序至少有一个不同),即方法签名不同,与方法修饰符,返回类型,形参名无关
构造方法——构造方法时一种特殊的方法,也称为构造函数或者构造器constructor(用于创建和初始化对象)
特点:1.方法名必须和类名相同。2没有返回值,也不能写void。3当创建类的对象时,会自动调用构造方法。4,一个类中可以有多个构造方法。5,如果没有自定义构造方法,则类中默认会有一个无参构造方法6如果自定义构造方法,则默认的无参构造方法失效,建议自己重写。6可以使用this调用当前类的另一个构造方法,但只能出现在构造方法第一行。
常用的包:
java.lang 包含Java的核心类,如System,String,Math等,该包默认会被自动导入,当使用其中的类,无需import导入
java.util包含实用的工具类,如Scanner,Arrays等
java.io包含输入/输出操作的类
java.sql包含数据库操作的类
java.net包含网络操作的类
java.awt包含图形窗口操作的类
访问修饰符
用来控制访问范围,可以修饰属性,方法,类等
修饰符 | 同一个类 | 同一个包内的类 | 不同包的子类 | 不同包并且不是子类 |
---|---|---|---|---|
public公开的 | Y | Y | Y | Y |
protected受保护的 | Y | Y | Y | N |
默认 | Y | Y | N | N |
private私有的 | Y | N | N | N |
总结:public在哪都能访问
protected:只有不同包并且非子类不能访问,其他都能访问
默认:只有本包可以访问
private:只有本类中可以访问
范围从大到小的顺序:public>protected>默认>peivate
类加载——将class文件读取加载到JVM内存中的过程,称为类加载
类加载的时机:
1.创建类的对象。 2调用类的静态属性或静态方法。 3.执行main方法时,main方法所在的类会被加载
4.通过反射调用类Class.forName(“包名.类名”)
舒适化顺序:
1.对象所在的类被加载
执行静态变量和静态代码块(根据定义的顺序,从上往下)
特性:1.静态变量在类加载时初始化,且在内存中只分配一块空间
2.静态代码块在类加载时执行,且只执行一次(类只会被加载一次),主要用于初始化静态属性
3.静态代码块中不能初始化实例变量,只能初始化静态变量
2.对象被创建
执行实例属性和代码块(根据定义的顺序,从上往下)
执行构造方法
(PS:执行先后顺序:静态代码块>代码块>构造方法)
Debug的使用:
1.设置断点
2.单步运行
F6:单步运行,接着执行下一次代码
F5:单步跳入执行,会进到方法中