注意点:
- 字符串比较实用equals方法,例如
class1.equals("头等舱") %s是占位符- 想要换行直接
sout(),别的不用加
入门
JDK
安装目录最重要的是bin里面的javac和java

基础概念
Scanner
1 | import java.util.Scanner; |
IDEA中的项目结构:
project
module
package
class
运算符
隐式转换
取值范围小的和取值范围大的进行运算,小的会先提升为大的再进行运算
byte short char三种类型的数据在运算的时候都会先升为int之后再进行运算
取值范围:byte<short<int<long<float<double
强制转换
取值范围大的不能付给取值范围小的,如果想这么做就要强制转换
目标数据类型 变量名=(目标数据类型) 被强制转换的数据;
字符串
字符串的+
“+”是字符串连接,不是算术运算,会拼接前后数据,例如
逻辑运算符
正常的&,|,^(异或),!不在赘述
短路逻辑运算符
&&,||
效果和&,|一样,但是有短路效果,如果左边的表达式能够确定最终的结果,那么右边的就不参与运行
判断与循环
switch
多case写法
1 | switch(week){ |
无限循环
1 | for(;;){ |
跳转控制
1 | for(int i=1,;i<=5;i++) |
数组
定义
数据类型[]数组名例如int[] array数据类型 数组名 []例如int array[]
初始化
在内存中为数组开辟空间并且把数据存入容器中的过程
静态初始化
数据类型[]数组名=new 数据类型[]{元素1,元素2,元素3…};
int[] array=new int[]{11,22,33}; 长度为3,数组长度不变化
double[] array2=new double[]{11.1,22.2};
简写格式:
int[] array={11,22,33};
动态初始化
数据类型[]数组名=new数据类型[数组长度];
int[] arr=new int[3];
遍历
数组长度用数组名.length即可
内存分配
- 栈:方法运行时使用的内存,比如main方法运行,进入方法栈中执行
程序的主入口(main方法)开始执行会进栈,执行完毕会出栈
- 堆:储存对象或者数组,new创建新的,都储存在堆内存
new出来的东西会在这块内存中开新的空间并产生地址
- 方法区:储存可以运行的class文件
- 本地方法栈:JVM在操作系统功能时使用
- 寄存器:给CPU使用
方法区在JDK8开始取消,新增元空间,将方法区功能进行拆分,有点放到堆里面有的到元空间里面
方法
方法是程序中最小的执行单元
说白了就是函数
定义方法
1 | public static void 方法名(){ |
调用
1 | 方法名(); |
需要先定义后调用.
带参数的
public static void 方法名(参数1,参数2){}
调用方法名(参数1,参数2);
要返回值就用return返回值;
注意方法不调用不会执行,方法和方法之间是平级关系,不可以嵌套定义,方法的编写顺序和执行顺序无关
返回值为void没有返回值,可以不写return,return后面跟的是变量名不是具体数据
如果是数组就用类似public static int[] 名称这种
方法的重载
在同一个class里面定义了多个同名的方法,这些同名的方法具有同种功能
每个方法具有不同的参数类型或者参数个数,这些同名的方法构成了重载关系
同一个class中方法名相同参数不同的方法.与返回值无关
参数不同:个数不同,类型不同,顺序不同
基本数据类型和引用数据类型
基本数据类型:整数,浮点数,布尔,字符
引用数据类型:除了上面的之外的 存储的是地址值
面向对象编程
类和对象
类:是对象共同特征的描述
对象:真实存在的具体东西
先设计类才能获得对象
如何定义类
1 | public class 类名{ //注意是没有static的 |
如何得到类的对象:
类名 对象名=new 类名();
比如:Phone p = new Phone();
如何使用对象:
访问属性:对象名.成员变量
访问行为:对象名.方法名(…)
- 用来描述一类事物的类叫:Javabean类,不写main方法
- 编写main方法的类叫做测试类,可以在测试类中创建Javabean类的对象并进行赋值调用
Tips:
类名首字母大写比较好
一个java文件中可以有多个class类,而且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名 一般还是建议一个文件一个class类
成员变量完整定义格式:修饰符 数据类型 变量名称 =初始化值; 一般不需要指定初始化值,存在默认值
封装
封装告诉我们如何正确设计对象的属性和方法
对象代表什么,就得封装对应的数据,并且提供数据对应的行为
private关键字
- 是一个权限修饰符
- 可以修饰成员(成员变量和成员方法)
- 被private修饰的成员只能在本类中才能访问
一个标准的private赋值方法
1 | public class GirlFriend{ |
就近原则
如果在方法中的变量和类里面的变量同名通常用离得近的,如果想用类中的需要加上this. 类似:this.age
构造方法的格式
例子:
1 | public class Student{ |
Tips:
1.方法名与类名相同,大小写也要一致
2.没有返回值类型,连void都没有
没有具体的返回值(不能用return返回数据)
1 | public class Student{ |
执行时机:
创建对象的时候由虚拟机调用,不能手动调用构造方法
每创建一次对象,就会调用一次构造方法
注意事项
构造方法的定义
- 如果没有定义构造方法,系统将给出一个默认的无参数构造方法
- 如果定义了构造方法,系统将不在提供默认的构造方法
构造方法的重载
- 带参构造方法和无参构造方法,两者方法名相同,但是参数不同,这叫构造方法的重载
建议:不论是否使用,都手动书写无参数构造方法和待全部参数的构造方法
标准的Javabean类
- 类名需要见名知意
- 成员变量应该使用
prvate修饰- 提供至少两个构造方法
- 无参数构造方法
- 带全部参数的构造方法
- 成员方法
- 提供每一个成员变量对应的
setXxx()/getXxx()- 如果还有其他行为也要写上
对象内存图
Student s= new Student();
- 加载class文件
- 申明局部变量
- 在堆内存中开辟一个空间
- 默认初始化
- 显示初始化
- 构造方法初始化
一个对象的内存图

new在堆内存开了一个空间(自身有地址值而且还有成员对象和成员方法的地址值)
如果用有参构造会给name和age之类的成员对象赋值
堆内存的地址会赋给变量s
两个对象的内存图

两个引用指向同一个对象

基本数据类型和引用数据类型
比如
1 | public class TestStudent{ |
里面的s,arr就是引用数据类型
基本数据类型的数据值是储存在自己的空间里的
赋值给其他变量,也是赋的真实的值
引用数据类型的数据值是储存在其他空间里的
自己的空间中储存的是地址值,给别人赋值也是赋的地址值
this的内存原理
this区分了局部变量和成员变量
它的本质就是所在方法调用者的地址值
成员变量和局部变量
| 区别 | 成员变量 | 局部变量 |
|---|---|---|
| 类中位置不同 | 类中,方法外 | 方法内、方法申明上 |
| 初始化值不同 | 有默认初始化值 | 没有,使用之前需要完成赋值 |
| 内存位置不同 | 堆内存 | 栈内存 |
| 生命周期不同 | 随着对象的创建而存在,随着对象的消失而消失 | 随着方法的调用而存在,随着方法的运行结束而消失 |
| 作用域 | 整个类中有效 | 当前方法中有效 |
键盘录入
第一种
nextInt();接受整数
nextDouble();接受小数
next();接受字符串
上述三种遇到空格,制表符,回车就停止接受数据了
第二种
nextLine();接受字符串
可以接受空格制表符,遇到回车才停止接受数据
注意,键盘录入的两种方式是不可以混用的
字符串
Java中的所有字符串文字,都是此类的对象
可以用String s=newString(char[] chs) String s=new String(byte[] bytes)来创建,当然了可以直接创建 String s="xxx"
如果使用双引号直接赋值,系统会检查该字符串在串池中是否存在,不存在就创建新的存在就复用
字符串的比较
使用==对于引用数据类型比较的是地址值
应该使用:
boolean equals方法(要比较的字符串)完全一样为true否则为falseboolean equalsIgnoreCase(要比较的字符串)忽略大小写的比较
sc.next()得到的字符串是new出来的新的