jdk包含了jre和java开发工具(javac.exe, java.exe, javadoc.exe )
jre包含了jvm 和java核心类库
为什么配置环境变量?
为了在任何路径下都可以执行开发命令, 所以配置环境变量
java_home 写到bin的上一层路径
编译命令: javac 文件名
运行命令: java 类名
带有public 的类需要和文件名一致, 其余的类名可以不喝文件名一致。
类名和文件名可以不一致
编译晚源代码之后,生成一个活多个字节码文件, class文件。
使用jvm中的类加载器和解释器对字节码文件进行解释运行。
需要将字节码文件中对应的类加载内存中,涉及到内存解析。
空指针:
假设说, 数组student[1] 已经是nullL了, 再student[1].number, 取其中的属性,自然是取不到的, 这叫空指针。
引用类型的变量, 只可能存两类值, 一个是null, 一个是地址值(含变量的类型)
第一个java代码:
package demo;
public class demos {
public static void main(String[] args){
// System.out.println("ok");
// System.out.println(122);
// System.out.println(423423);
Demo1.printString();
}
}
class Demo1 {
public static void printString(){
System.out.println("----ok");
}
}
关于特性
两个要素:类, 对象
三个特征: 封装 继承 多态
健壮性:
1. 自动垃圾回收机制
2. 去了c的指针
3. 会出现内存溢出, 内存泄露
跨平台性: 一次编译多次运行
关于命名
1.Java保存的文件名必须与类名一致;
2.如果文件中只有一个类,文件名必须与类名一致;
3.一个Java文件中只能有一个public类;
4.如果文件中不止一个类,文件名必须与public类名一致;
5.如果文件中不止一个类,而且没有public类,文件名可与任一类名一致。
6. 一个文件中开始执行的了中必须有个main方法, 作为执行的入口
数据类型
- 基本数据类型 :整数, 小数,字符,布尔
- 引用数据类型: 数组, 类,接口
常量
其余的都略过不说, 特殊的布尔类型也是常量。
单引号里面只能是一个字符;多个字符的要用双引号;
变量
每个变量必须要指定类型,是强类型语言;
变量包含了变量类型,变量名,存储的值
作用:用于在内存中保存数据
定义变量的方式:必须先声明再使用
数据类型 变量名 = 变量值
int myAge = 10;
或者 先定义类型,和名字,再进行赋值
int myAge;
myAge = 10001;
变量的类型
一 按照数据类型分 :
注意上面的图,是数据类型的分类
字符型是一个字符;
字符串是一个类类型的数据,属引用类型。
二 按照变量在类中声明的位置分
成员变量 和局部变量 (在面向对象的时候能体现)
整型变量
1字节是8bit,每一个bit是一位, 每一位都是用0或者1表示;
在定义数字类型的时候, 如果超过其存储的范围会报错, 编译不通过。
long型变量必须以l或者L结尾,这是作为标识;
浮点型float类型数据后面要加上f或者F 作为表示;但是double不用加;
字符型:1个字符是2个字节,使用单引号, 只能写一个字符。
char c1 ='a'
char c2 = '\n' 这是转义字符,算作一个字符;
\n是换行符, \t是制表符,就是tab键
类型转换
小容量的的会向大的容量自动转换 。 此时的容量大小是数的范围大小。
byte或 char或 short -> int -> long -> float -> double
当这三种类型 byte, char,short在进行运算的时候结果会转为int
如果接受的类型不是int类的, 就会报错
class Demo2 {
public static void test1() {
byte a = 2;
char b = 'a';
int c = a + b;
// byte c1 = a + b; 编译不会通过 接收的至少不要是int
System.out.println(b);
System.out.println(c + 1);
}
}
但是大的向小的转换的时候回损失精度。
强制类型转换
double s1 = 12.9;
int s2 = (int)s1; // 前面加上要强制转换的类型
float s3 = (float)s1;
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
注意:
- 对于整型常量, 即自己定义的,默认是int类型,
- 浮点型常量, 即自己定义的, 默认是float类型
byte z1 = 1;
byte z2 = z1 + 10; // 这样编译出错 因为10 是常量, 默认是int