概述
JDK Java development kit,Java的开发和运行环境,Java的开发工具(编译器 javac等)和jre
JRE Java runtime environment Java运行环境,java运行的所需的类库+JVM(java虚拟机)环境变量: 让java jdk\bin目录下的工具,可以在任意目录下运行,原因是,将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。
环境变量的配置:JAVA_HOME=%安装路径%\Java\jdk path=%JAVA_HOME%\bin
javac命令和java命令
要知道java是分两部分的:一个是编译,一个是运行
Javac:负责的是编译的部分,当执行javac时,会启动java的编译器程序。对指定扩展名的.java文件进行编译。生成了jvm可以识别的字节码文件。也就是class文件,也就是java的运行程序。
Java:负责运行的部分.会启动jvm.加载运行时所需的类库,并对class文件进行执行.
一个文件要被执行,必须要有一个执行的起始点,这个起始点就是main函数.
语法
关键字、标识符
关键字:
其实就是某种语言赋予了特殊含义的单词。
保留关键字字:
其实就是还没有赋予特殊含义,但是准备日后要使用过的单词。
这些保留字不能用于常量、变量和任何标识符的名称
1 访问控制: private、protected、public
2 类、方法、和变量修饰符: class、extends、final、synchronized等
3 程序控制语句 :break、default、instanceof等
4 错误处理:assert、try、throw、finally等
5 包 和引用变量: import、package、this、super、void
6 基本数据类型和保留关键字: int, goto、const、null(保留关键字)
标识符:
其实就是在程序中自定义的名词。如类名、变量名、函数名。包含 0-9 ;a-z ; _ ; $ 。
1 数字不可以开头2 不可以使用关键字 3大小写敏感
变量、常量
常量:
程序中不会变的数据
变量:
可以被改变的数据
三种:局部变量、成员变量(非静态变量)、类变量(静态变量)
变量空间开辟的三个要素:数据类型、变量名称、变量初始化值
变量的作用域: 作用域从变量定义的位置开始,到该变量所在的那对大括号结束;
生命周期:
变量从定义的位置开始就在内存中活了;
变量到达它所在的作用域的时候就在内存中消失了;
修饰符
像其他语言一样,Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:
访问控制修饰符 :public, protected, default,private
非访问控制修饰符 : final, abstract, static, synchronized
数据类型
1):基本数据类型:
简单类型 boolean byte char short int float long double void
二进制位数 1 8 16 16 32 32 64 64 --
级别从低到高:byte,char,short(这三个平级)–>int–>float–>long–>double
自动类型转换:从低级别到高级别,系统自动转的;
强制类型转换:什么情况下使用?把一个高级别的数赋给一个别该数的级别低的变量;
2):引用数据类型:
数组、类、接口。
运算符
算术
+ , - , * ,/ ,% ,++ ,-- ,+= ,-=
%:任何整数模2不是0就是1,所以只要改变被模数就可以实现开关运算。
+: 可以做连接符。
逻辑
& , | ,^ , ! , && , ||
^ : 异或 , 两边结果一样,就为false。两边结果不一样,就为true.(任何数与0进行异或操作后的结果都为该数本身。)
区别: & :无论左边结果是什么,右边都参与运算。 &&:短路与,如果左边为false,那么右边不参数与运算。
|:两边都运算。 ||:短路或,如果左边为true,那么右边不参与运算。
位
& , | ,^ , << ,>> , >>>
用于操作二进制位的运算符
>>>(无符号右移)
练习:
对两个变量的数据进行互换。不需要第三方变量。int a = 3,b = 5;-->b = 3,a = 5; 方法一: a = a + b; a = 8; b = a - b; b = 3; a = a - b; a = 5; 方法二: 明白一个数,如果异或同一个数两次,那么就等于本身 a = a ^ b;// b = a ^ b;//b = a ^ b ^ b = a a = a ^ b;//a = a ^ b ^ a = b; 练习:高效的算出 2*8 = 2<<3;
语句
条件、循环
switch 后面的小括号中的变量应该是byte,char,short,int四种类型中的一种;
break:作用于switch ,和循环语句,用于跳出,或者称为结束。
continue:只作用于循环结构,继续循环用的。
方法
为了提高代码的复用性,可以将其定义成一个单独的功能,该功能的体现就是java中的函数。函数就是体现之一。
函数的作用:
1)、用于定义功能。
2)、用于封装代码提高代码的复用性。
注意:函数中只能调用函数,不能定义函数。
主函数:
1)保证该类的独立运行。
2)因为它是程序的入口。
3)因为它在被jvm调用。
数组
二维数组初始化
1 int a[][] = new int[3][];
a[0] = new int[2];
2 int a[][] = new int[3][5];
3 int a[][] = {
{1,2}, {3,4,5,6}, {7,8,9}};Java内存
出门左转JVM。
题目
public class Main { public static void main(String[] args) { int a = 0; change(a); System.out.println(a); User user = new User(); user.id = 0; change(user.id); System.out.println(user.id); change(user); System.out.println(user.id); change2(user); System.out.println(user.id); } private static void change(int a) { a = 1; } private static void change(User user){ user = new User(); user.id = 2; } private static void change2(User user) { user.id = 3; }}class User { public int id;}0003 如果是8种基本类型,则一定是值传递,方法内改了参数值一定不会影响到方法外,即代码中的change(a)和change(user.id) 如果是引用类型,则:如果改的是对象中某个字段的值,则方法外也会受到改变,即代码中的change2(user) 如果是引用类型,且重新赋值,那么就是将新的地址给此引用,则方法外不会受到改变,即代码中的change(user);
下面的代码会输出什么?public class Main { public static void main(String[] args) { B b = new B(); }}class A { static { System.out.println("A1"); } { System.out.println("A2"); } public A() { System.out.println("A3"); } { System.out.println("A4"); }}class B extends A{ static { System.out.println("B1"); } { System.out.println("B2"); } public B() { System.out.println("B3"); } { System.out.println("B4"); }}答案:A1B1A2A4A3B2B4B3注: 先执行静态,再执行非静态; 先加载父类,再加载子类; 非静态代码块,依赖构造器加载,会在构造器加载时先加载; 同类代码,按顺序执行。
Integer a = 100; Integer b = 100;享元模式:像 “Integer 变量名=?” 这种形式定义的Integer变量会被放入常量池,保存了-127~128之间的所有对象,当使用Integer a = 100这种用法时,不会创建新对象,而是从共享空间中取 。