文件名 | 描述 |
---|---|
Progrm Files | 默认存储的64位软件 |
Progrm Files(x86) | 默认存储32位软件 |
DOS命令 | 描述 |
---|---|
盘符: (C: D: E: ) | 打开指定盘 |
dir | 查看当前目录中包含所有的目录以及文件,会显示隐藏文件(数目) |
cd | 跳转到指定位置 |
cd\ | 返回到当前目录的根目录 |
cls | 清空屏幕 |
ipconfig | 查看本机ip地址 |
exit | 退出 |
Ctrl+c | 强行终止程序执行 |
java -version | 查看当前jdk版本 |
括号中是JDK5.0前名称 | 描述 |
---|---|
JavaSE (J2EE) | java平台标准版,可以做桌面程序开发,是整个Java技术的基础和核心 |
JavaEE (J2ME) | 平台企业版,可以做网站 |
JavaME (J2SE) | 平台微型版,可以做移动端程序开发 |
SDK、JDK、JRE、JVM图解:
在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,可以这么认为bin里的运行程序就是jvm,lib中是jvm工作所需要的类库,jvm和lib合起来就称为jre。(javac.exe 编译命令java.exe 运行命令)
JVM是不能够单独安装的,如果开发就安装JDK,只做测试可以只安装JRE。
java中运行的都是.class字节码文件。
调用方法是栈的形式指向的,当调用方法的时候,方法进栈,调用结束,方法出栈。
如果要求在任一盘符任一位置都可以使用 --> 需要配置环境变量,使其在电脑的任意位置都可以使用。
(在系统变量中添加变量JAVA_HOME,值为JDK路径,在系统变量的path变量中添加:%JAVA_HOME%\bin
和%JAVA_HOME%\jre\bin
)
计算机环境变量设置分为两种:
配置path变量成功后 --> 在不同盘符路径下使用javac命令的话,首先会先在当前路径目录下找,找不到 --> 再去path路径找 —> 所有path路径都找不到 --> 就会报错
注意:当环境变量配置成功后,则必须将之前的DOS命令窗口关闭才能生效
关键字(在Java中具有特殊意义的,全部小写 如:class、public、static、void等)
标识符(以字母、下划线_或$ 开头,其后可以是字母、数字、下划线_或$,区分大小写,不能使用关键字)
变量名称、方法名称、参数名称采用驼峰命名法(除了第一个单词小写,其后单词首字母大写,标识符的长度最好不要超过15个字符)
字符编码:按某种格式某种规定将数据存在计算机中
常用字符编码:
- UTF-8:使用变长字节表示,使用的字节个数从1到4个不等。比如英文字母,UTF-8编码和ASCII码是相同的(单字节)
- UTF-16:使用变长字节表示,编号在U+0000到U+FFFF的字符(常用字符集),直接用两个字节表示;编号在 U+10000到U+10FFFF之间的字符,需要用四个字节表示。
- UTF-32:是字符所对应编号的整数二进制形式,四个字节。这个就是直接转换
变量
内存包含三部分:
关于字符串常量(String str=”李四”)的声明
变量声明时,字符串常量(String str=”李四”)先在方法区的常量池中找,若存在,则不再分配空间,str直接指向常量池中的“李四”值的地址空间,否则,在常量池中开辟空间存储该值(“李四”),并将str指向该空间。
static修饰的静态属性(静态属性/类属性),存放在方法区(共享区中) 比如:
当有多个重复引用变量,通过添加static静态属性,存储到方法区(共享区)中,以节省空间---- ->[例如:Student学生类中有属性school学校,同一学校的学生的school属性值都相同,则应该通过在属性school前添加static修饰,以存放在方法区(共享区)中]
java程序运行时,在内存中JVM会自动分配空间
在编译时,是不分配空间的。
引用数据类型(在内存中存放地址(引用)【常量池中存放值,引用数据类型的变量指向该地址,比如String类型)
(比如:String str = “字符串”,String是一个引用数据类型,值"字符串"存放在常量池中,str变量只是存放一个指向"字符串"这个值得引用/地址)
八大基本数据类型
基本数据类型(包装类) | 占用存储空间 | 数据存储范围 |
---|---|---|
byte(Byte) | 1字节 (8bit) | -128 ~ 127 |
short(Short) | 2字节 (16bit) | -2^15 ~ 2^15-1 (-32768 ~ 32767) |
int(Integer)(默认值0) | 4字节 (32bit) | -2^31 ~ 2^31-1 (21 亿) |
long(Long) | 8字节 (64bit) | -2^63 ~ 2^63-1 |
float(Float)(默认值0.0) | 4字节 (32bit) | -3.403e-45 ~ 1.4e38 |
double(Double) | 8字节 (64bit) | -1.798E308 ~ 1.798E308 |
char(Character) (默认值\u0000) | 2字节 (12bit) | 0 ~ 65535,不能取值负数,或单引号引起来 |
boolean(Boolean)(默认值false) | 1字节 (8bit) | 只有true和false两个值 |
所有引用数据类型的默认值都是null。
数据类型转换的5条规则:
- 基本数据类型中除了boolean类型以外,剩余7种类型可以进行相互转换。
- byte -> short -> char -> int -> long -> float ->double (取值范围变大),从前往后是自动类型转换,从后往前是强制类型转换(取值范围小的类型赋给取值范围大的类型是自动类型转换,强制类型转换相反)
- 对byte、short、char类型赋值的时候,如果没有超出该类型取值范围则可以直接赋值(用数字赋值)
- 当对byte、short、char类型进行混合运算时,会自动先转为int类型然后再进行计算
- 当多种数据类型进行混合运算时,则先转换为取值范围大的类型,然后再进行计算
- 当做减法运算时,必须保证两个操作数都是数值类型
int a = 6,b = 8;
int c = a-- /2; //结果是:a=5,c=3,先算a/2得到c,再a--
int d = --a * b++; //结果是:a=5,b=9,d=40,先算a自减少,a=5,再算a*b等于40,也就是d=40,再算b++ ,b=9
逻辑运算符:
逻辑与& 逻辑或| 逻辑异或^ 逻辑非! 短路与&& 短路或||
优先级别: 算术运算符 > 关系运算符 > 逻辑运算符
在for循环中,三个表达式都可以省略,但是分号必须编写,否则会出现死循环也叫做无限循环,解决办法:按ctrl + c强行终止程序运行。
switch case表达式中参数值可以是byte、short、int、char,在JDK7.0及以后还可以是String类型,枚举。
当方法是无返回类型时,则可以在方法体中编写return,但是必须编写为return;
传递的是真正的值,通过方法改变基本数据类型变量的值,对另一个方法中变量的值没有任何影响,各自变量是相互独立的。
比如main方法中有 int x=10, y=20;
通过调用方法change(x,y)对x、y值进行修改为15和30,但是main中的xy值是不变的。
传递的是地址引用,也就数说共用指向同一个对象(指向同一地址空间),当方法对引用数据类型的值修改时,则所有引用的值都 发生修改。
static关键字修饰的属性和方法,叫静态属性/ 方法,有以下特性:
封装:
通过private隐藏类的内部信息,不允许外部程序直接访问,而是通过方法进行操作。
一个类中,当局部变量和成员变量同名时,并且访问成员变量则必须使用this。(this表示当前这个对象,也就是说当前谁调用这个方法,则这个对象就是谁,this调用先在子类中找,找到调用,没找到再去父类中找)
继承:
继承就是如果多个类有相同的属性和方法,就单独抽取出来,编写为一个类(父类),然后其他类(子类)继承这个父类,并添加自己独有的属性和方法。
继承的好处:减少代码的冗余性(重复性)
继承的注意事项:
- 当一个类没有指名继承具体哪个父类时,则默认继承object【Object类是所有类的父类(超类)】
- 子类继承父类,但是不能继承父类的构造方法
- 继承满足is a关系。(如:猫 是 动物,西瓜 是 水果)
- java中只支持单继承(也就是类的单根性)
多态:
多态是同一个行为具有多个不同表现形式或形态的能力。(多个对象调用同一个方法,得到不同的结果,就是覆盖重写方法)
多态的语法格式:父类类名 引用名称 = new 子类类名();
多态调用时,该引用名称只能访问父类中的属性和方法【不能访问子类中的属性和方法】,但是优先访问子类重写以后的方法
多态存在的三个必要条件:
1. 子类必须继承父类
2. 子类重写父类的方法(override也叫做覆盖)
3. 父类引用指向子类对象 父类类名 引用名称 = new 子类类名();
关于重写(覆盖override)满足的条件:(就是方法的所有都要和父类的一致)
- 子类方法名称必须与父类方法名称一致
- 参数列表要一致
- 返回类型一致或父类方法返回类型的子类类型
- 修饰符不能缩小范围
使用多态实例化子类时的注意事项:【***】
- 先执行父类的构造方法,然后再执行子类的相匹配构造方法
- 如果子类构造方法中没有指明则默认调用父类无参构造方法()默认super())
- 如果子类构造方法中指明调用父类哪个构造方法,则先执行父类相匹配的构造方法,然后再执行子类相匹配构造方法
建议:当手动编写构造方法时,先编写无参构造方法,再编写所需要的构造方法,父类都要写无参构造方法,子类构造方法会默认调用super()父类无参构造方法
多态中的两种类型转换
父类类型 引用名称 = new 子类类名();
进行向下转型时,建议先进行类型判断,通过
instanceof
关键字,否则可能出现类型转换异常java.lang.ClassCastException