目录
3. 标识符
4.一个项目project可以有很多类,public class 类名,类名必须与文件名一致;
6 存储单元:
8. 逻辑运算符:
11. switch方法
12. foreach
13. 方法
14. 数组
15. 集合
1. 八大基本数据类型:
整型:byte,short,int,long;(字节数:1 2 4 8)
浮点数:float,double;(字节数:4 8) et: float num = 3.14f; double num = 3.14;
boolean (1字节)
字符型:char;(2字节)(String是引用类型)
(强制类型转换形式:et: double num=3.1111111; float num1=(float)num;
2.引用数据类型:类都要实例化!
a. 提到引用数据类型(类),其实我们对它并不陌生,如使用过的Scanner类、Random类。
我们可以把类的类型为两种:
- 第一种,Java为我们提供好的类,如Scanner类,Random类等,这些已存在的类中包含了很多的方法与属性,可供我们使用。
- 第二种,我们自己创建的类,按照类的定义标准,可以在类中包含多个方法与属性,来供我们使用。
第一种//
与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式。
数据类型 变量名 = new 数据类型();
每种引用数据类型都有其功能,我们可以调用该类型实例的功能。变量名.方法名();//调用前必须先实例化,即定义!
Sanner类获取到录入的数据。使用步骤:
1. 导包:import java.util.Scanner;
2. 创建对象实例:Scanner sc = new Scanner(System.in);
3. 调用方法:int i = sc.nextInt();用来接收控制台录入的数字;String s = sc.next(); 用来接收控制台录入的字符串
Random类,它可以产生多种数据类型的随机数。Random使用方式:
1. import导包:所属包java.util.Random
2. 创建实例格式:Random 变量名 = new Random(int num); 返回在 0(包括)和指定值(不包括)之间int随机数
String类:定义可以String str;实例化String str = new String();
//第一种
第二种//
1. 类的定义格式:
//创建java文件,与类名相同
public class 类名{
数据类型 属性名称1;
数据类型 属性名称2;
…
}
2. 类的使用格式:使用方式和使用引用数据类型Scanner类相似。
导包:我们将所有的类放到同一个文件夹下,可以避免导包。
创建对象(定义、实例化):类名 变量名 = new 类名();
调用方法:变量名.方法名(参数);
访问属性:变量名.属性;(属性即类的成员变量) //第二种
3. 标识符:
字母数字下划线美元符组成,不能以数字开头;
(项目名类名首字母大写,变量名方法名首字母小写,多个字母组成都是驼峰型)
4. 一个项目project可以有很多类,public class 类名,类名必须与文件名一致;
一个类可以有很多方法(分为普通方法、静态方法、构造方法),main是主方法,程序的入口。(代码只能写在方法里,不能写在类里,类里只能定义变量)
5. 变量:
成员变量(有默认值,整型是0,浮点型是0.0,boolean是false,String是null,char是空格)和局部变量(无默认值)
(成员变量定义在类内,方法外,即类的属性;使用成员变量格式:先实例化类,然后调用)
成员变量和局部变量的区别:
区别一:定义的位置不同
定义在类中的变量是成员变量
定义在方法中或者{}语句里面的变量是局部变量
区别二:在内存中的位置不同
成员变量存储在堆内存的对象中
局部变量存储在栈内存的方法中
区别三:声明周期不同
成员变量随着对象的出现而出现在堆中,随着对象的消失而从堆中消失
局部变量随着方法的运行而出现在栈中,随着方法的弹栈而消失
区别四:初始化不同
成员变量因为在堆内存中,所有默认的初始化值
局部变量没有默认的初始化值,必须手动的给其赋值才可以使用。
6. 存储单元:
1B=8bit,1KB=1024B,1MB=1024KB,1GB=1024MB,1TB=1024GB,1PB=1024TB;
7. 转义字符:
8. 逻辑运算符:
& 逻辑与 //左右两边的表达式都是要运算,全true为true;
&& 短路与 //&&与&的区别是:如果&&左边的表达式为false,右边不再计算!
| 与 || 同理
^ 左右表达式相同为false,不同为true
9.位运算符 ![](https://img-blog.csdnimg.cn/20190307154301676.png)
10. 运算符优先级:
下图按照运算先后顺序排序(优先级相同的情况下,按照从左到右的顺序依次运算)
优先级 | 描述 | 运算符 |
1 | 括号 | ()、[] |
2 | 正负号 | +、- |
3 | 自增自减,非 | ++、--、! |
4 | 乘除,取余 | *、/、% |
5 | 加减 | +、- |
6 | 移位运算 | <<、>>、>>> |
7 | 大小关系 | >、>=、<、<= |
8 | 相等关系 | ==、!= |
9 | 按位与 | & |
10 | 按位异或 | ^ |
11 | 按位或 | | |
12 | 逻辑与 | && |
13 | 逻辑或 | || |
14 | 条件运算 | ?: |
15 | 赋值运算 | =、+=、-=、*=、/=、%= |
16 | 位赋值运算 | &=、|=、<<=、>>=、>>>=
|
11. switch语句
case 穿透:case语句只判断一次,如果一次成功,之后不再判断;
switch (week) {
case 1:
case 2:
case 3:
case 4:
case 5:
// 当 week 满足值 1、2、3、4、5 中任意一个时,处理方式相同
System.out.println("今天是工作日");
break;
case 6:
case 7:
// 当 week 满足值 6、7 中任意一个时,处理方式相同
System.out.println("今天是休息日");
break;
}
//需要注意的是,在switch语句中的表达式只能是byte、short、char、int类型的值,如果传入其它类型的值,程序会报错。但上述说法并不严谨,实际上在JDK5.0中引入的新特性enum枚举也可以作为switch语句表达式的值,在JDK7.0中也引入了新特性,switch语句可以接收一个String类型的值。
//default 不一定放在最后!
12. foreach
每次从数组中取出一个值,赋值给i;
例子:变量数组
一维数组arr[] for(int i : arr){ System.out.println(i+" ");}
二维数组arr[][] for(int[] i : arr){
for(int j : i){System.out.println(j+" ");}
}
13. 方法:(类似于其他语言的函数)
在Java中,声明一个方法的具体语法格式如下:
访问权限修饰符 其他修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,......){
// 定义方法中的参数是形式参数,传递过来的是实际参数
执行语句
………
return 返回值;
}
// void的方法中可以写 return ;,意味着退出,相当于循环体中的break;
//需要特别注意的是,方法中的“参数类型 参数名1,参数类型 参数名2”被称作参数列表,它用于描述方法在被调用时需要接收的参数,如果方法不需要接收任何参数,则参数列表为空,即()内不写任何内容。方法的返回值必须为方法声明的返回值类型,如果方法中没有返回值,返回值类型要声明为void,此时,方法中return语句可以省略。
//(注:形参和实参
- 当调用方法时,如果传入的数值为基本数据类型(包含String类型),形式参数的改变对实际参数不影响
- 当调用方法时,如果传入的数值为引用数据类型(String类型除外),形式参数的改变对实际参数有影响)
传参:分为值传递(传递值)和引用传递(传递地址)
//普通方法:(调用方法必须先实例化:方法的类名 变量名 = new 方法的类名(); 调用:变量名.方法名();)
静态方法(static): 不需要实例化,直接调用 类名.方法名();在本类中可以直接调用 方法名();
//非静态方法可以直接调用静态方法
非静态方法可以直接调用静态方法
静态方法只能调用静态方法,不能直接调用非静态
一个类中调用类一个类的静态方法,直接 类名.方法名
调用静态变量,直接 类名.变量名
// 重载: Java允许在一个类中定义多个名称相同的方法,但是参数的类型或个数必须不同,这就是方法的重载。(通过传入不同的参数便可以确定调用哪个重载的方法。值得注意的是,方法的重载与返回值类型无关,它只有两个条件,一是方法名相同,二是参数个数或参数类型不相同。)
//一个方法可以调用另一个方法。一个类中的方法可以调用另一个类中的方法。用法同上。
构造方法:
是对象创建时要执行的方法,在执行这个方法的时候给对象进行属性赋值,从而在创建对象的同时就明确了对象的属性值
//构造格式:
修饰符 构造方法名(参数列表)
{
}
//构造方法的体现:1.构造方法没有返回值类型。也不需要写返回值。因为它是为构建对象的,对象创建完,方法就执行结束。2.构造方法名称必须和类名保持一致。3.构造方法没有具体的返回值。
//构造方法内存图解:
//默认构造方法:
class Person {
//如果没有显示指定构造方法,编译会在编译时自动添加默认的构造方法
//Person(){} //空参数的默认构造方法
}
//注:
- 一个类中可以有多个构造方法,多个构造方法是以重载的形式存在的
2. 构造方法是可以被private修饰的,作用:其他程序无法创建该类的对象
3. 构造方法在对象创建时就执行了,而且只执行一次。
14. 数组
1.数组定义:
a. 数据类型[] 数组名 = new 数据类型[元素个数或数组长度]; (数组有默认值,同成员变量的默认值)
b. int[] x; // 声明一个int[]类型的变量 x = new int[100]; // 创建一个长度为100的数组
2.int length = arr.length;//获取数组长度
3. 数组的静态初始化格式:
a. 类型[] 数组名 = new 类型[]{元素,元素,……}; b. 类型[] 数组名 = {元素,元素,元素,……};
4. 二维数组的定义:
int[][] arr = new int[3][4];
int[][] arr = new int[3][];
int[][] arr = {{1,2},{3,4,5,6},{7,8,9}};
5.不定长数组:int... arr;String... arrstr;... ...
只能作为参数传递,且放在参数列表的最后,只能有一个不定长数组!
15. 集合
ArrayList集合相当于是一个长度可变的数组。
1. 创建集合的格式:
导包:import java.util.ArrayList;
创建对象:与其他普通的引用数据类型创建方式完全相同,但是要指定容器中存储的数据类型:
ArrayList<要存储元素的数据类型> 变量名 = new ArrayList<要存储元素的数据类型>();
//注: 集合中存储的元素,只能为<>括号中指定的数据类型元素;
<要存储元素的数据类型>中的数据类型必须是引用数据类型,不能是基本数据类型;//
基本数据类型对应的引用数据类型:
基本数据类型 | 对应的引用数据类型表示形式 |
byte | Byte |
short | Short |
Int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
2. 例子:
public class Student {
String name; //姓名
int age; //年龄
}
Public static void main(String[] args){
ArrayList<Student> list = new ArrayList<Student>();
}
2. 常用方法:
方法声明 | 功能描述 |
boolean add(Object obj) | 将指定元素obj追加到集合的末尾 |
Object get(int index) | 返回集合中指定位置上的元素 |
int size() | 返回集合中的元素个数 |
常用方法补充:
方法声明 | 功能描述 |
boolean add(int index, Object obj) | 将指定元素obj插入到集合中指定的位置 |
Object remve(int index) | 从集合中删除指定index处的元素,返回该元素 |
void clear() | 清空集合中所有元素 |
Object set(int index, Object obj) | 用指定元素obj替代集合中指定位置上的元素 |