解决IDEA运行时卡顿的问题:把数值改大一点
相关概念:
- Java三大版本:JavaSE,JavaME,JavaEE
- JDK:Java Development Kit(Java开发者工具)
- JRE:Java Runtime environment(运行库,属于JDK)
- JVM:Java Virtual Machine(虚拟机)
包:
- package:用于指明当前类所在的包,必须位于最上面。一般使用公司的域名倒置作为包名,如com.baidu.www是一个三层的包(如果src右键建包时,输入com.baidu.www生成的包如下图所示,将标黄位置的对勾取消)
- import:导入包
Java doc:文档注释
1. 用命令行生成文档:
- 在左栏选中当前类,如下图右键打开文件夹
- 在文件夹里shift+右键打开cmd执行如下命令,文件夹内生成一堆文档
2. 用IDEA生成java.doc文档
java程序执行方法:
1. 对于单个文件:
2. 有包的情况:
两条命令需要在不同的文件夹下执行,第二条命令的标黄位置是传给main()的参数,通过args[]可以取出
用scanner对象接收用户输入:
- scanner.hasnext():判断本次有没有输入
- scanner.next():接收输入,将空格作为结束符
- scanner.nextLine():接收输入,将Enter作为结束符
同理对于其它数据类型还有对应的方法:如scanner.hasNextInt(),scanner.nextInt()
查看内置类的具体定义:
按住ctrl点击类名,再点击左侧可以查看列表
Debug断点:
先设置断点,再点击瓢虫,之后每次点击图三标记
可变数据参数:
- 适用情况:函数原型作用域的形参中,同一类型的参数不确定有几个时
- j.length获取长度,操作类似于数组
- 该可变参数只能在形参表的最后一项
- 传参时,可以传一串数字,也可以像图二传一个数组
数组:
1. 一维数组:
int[] 看做是数据类型,在传参时类型都是int[]形式的
2. 多维数组:
3. Array类:
类名.方法名(数组名)
重点:
1. 构造函数:
- 新建对象,要用new构造器,其中Person()是构造函数(c++中,Person person(参数))
- 一旦定义有参构造函数,无参构造函数必须显式定义
- alt+insert快捷生成构造函数constructor
- 实例化子类,会默认自动调用父类的构造方法再调用子类
- 在子类构造方法中手动调用父类构造方法super(),且必须写在子类构造方法的第一行
- 在子类构造方法中手动调用自身构造方法this(),也必须写在子类构造方法的第一行,所以super()和this()不能同时出现
- 在子类中super代表上一级父对象
2. 继承:子类 extends 父类
- Java只支持单继承(只有一个父亲),C++支持多继承(要设置虚基类以保证父类方法在程序中只有一份拷贝,虚基类的方法不一定是虚函数)
- 所有类都默认继承Object类
- 在子类中访问父类,用super作为父类对象(多层继承怎么办)
- ctrl+H 快捷键可以立即查看当前类的继承关系
- 如果父类用了final关键字,就不允许继承了
3.栈和堆:
- main方法在栈的最底部,当main() 弹出,程序结束
- 栈中是存储调用的方法和引用,如数组名、对象名
- 堆中存储完整的对象和数组元素;堆中包含方法区:存放类定义,String对象(String对象是不能修改的)和静态方法等
4. 多态和重写:
- 父指针指向的子对象可以访问子类重写的方法
- C++:把父类的方法声明为虚函数,可以实现多态。
- 重写的快捷键也是alt+insert
- static、final、private类型的方法是不可以重写的
5. instanceof和父子类型转换:
6. 抽象:public abstract 类名{}
- 抽象类里面可以有抽象方法(没有方法体,public abstract),也可以有普通方法。
- 抽象方法必须在抽象类中,所以子类必须实现全部的抽象方法,除非子类也是抽象类
- 不能实例化
7. 接口:public interface 接口名{}
- 接口里全是抽象方法,所以public abstract可以省略
- 接口里的属性都是常量,所以不建议写
- 接口中的方法在接口类中必须全部实现:public class 类名 implements 接口名1,接口名2{}
8. 异常:
- 选中一段代码,Ctrl+alt+t可以自动包裹进异常
9. 注意:
main()里面可以定义变量,和普通类的成员函数不同
用不太到的东西:
1. 静态导入包:
对于系统内置类,本来是内置类.方法(参数),如果在导入包的语句中加入static,并且在后面加.方法名,调用时就可以直接写方法名(参数)
2. 内部类:
3. 匿名代码块{},静态代码块static{}
实例化对象时会执行,执行顺序:静态代码块(只执行一次),匿名代码块,构造函数
4. 自定义异常:
不想学了