一、Java环境设置
1.下载JDK -> 安装JDK -> 配置环境变量 -> 用命令行工具检查
2.下载Eclipse -> 安装 Eclipse
二、Java基础语法
1.Hello World!
public class First{
public static void main(String[] args) {
System.out.println("Hello World!");//换行
//System.out对象调用了它的println方法
System.out.print("Hello World!");//不换行
}
}
//约定俗称K&R代码风格,感觉好反人类,好别扭
//觉得微软代码风格好看多了
注意:
(1)源代码的文件名必须与类名相同;
(2)Java中的“方法”就是其他语言中的“函数”;
(3)Java中所有函数都是某个类的方法;
(4)main方法必须声明为public,main方法必须为静态的,main方法是程序的入口;
2.注释
(1)单行注释://
(2)多行注释:/* 和 */
(3)文档注释:解释类、方法、成员变量的用途
(Eclipse中快速生成文档注释:/**加回车)
注意: 不能嵌套多行注释;注释中当心“\u”;
3.数据类型
(1)八种基本类型primitive type:
4种整形:byte(1字节)、short(2字节)、int(4字节)、long(8字节)
2种浮点类型:float(4字节)、double(8字节)
1种字符类型:char(2字节)(c中1字节)
1种boolean类型:取值true、false
(2)引用类型(reference type):引用类型的值是对对象的引用(String属于引用类型)
byte v1 = 123; //十进制
short v2 = 0b11001; //二进制,0B11001
int v3 = 0xF78A; //十六进制
long v4 = 199L;
float v1 = 123.4F; //以F或f结尾表示float类型
double v2 = 123.4D; //以D或d结尾表示double类型
double v3 = 123.4; //默认为double类型
float v4 = 1.234E2F;
double v5 = 1.234e2;
boolean v1 = true;
boolean v2 = false;
char v1 = 'A';
String v2 = "ABCD";
String v3 = ""; //v3指向一个空串的地址
String v4 = null; // v4不指向
/*数字中可以加下划线:增强代码可读性(不可在小数点、特殊字母前后使用,不可在数字最前和最后使用)*/
4.变量与常量
(1)变量
任何变量在使用之前都必须先初始化
a.局部变量:需要手动初始化
b.非局部变量(实例变量、类变量):编译器会自动给未初始化的变量设置一个初始值(个人感觉实例变量和C++中数据成员差不多,类变量和C++中静态数据成员差不多)
默认值是:0、boolean:false、对象:null
(2)常量(final)
a.只能赋值一次,赋值后不可更改
b.常量名一般大写
c.类常量(static final):一个常量在一个类的多个方法中使用
----定义在main外部;----声明为public,其他类的方法也可以使用这个常量;
public class first{
public static final double PI = 3.14;
public static void main(String[] args) {
}
}
5.运算符
原则:尽量使用小括号
System.out.println(Integer.toBinaryString(-128));
//输出对应的2进制数
注意: Java条件判断中条件必须是boolean类型
6.类型转换(理解)
(1)窄化基本类型转换:数据范围大的转为数据范围小的,可能丢失精度和范围,需强制转换
(2)拓宽基本类型转换:数据范围小的转为数据范围大的,可以自动转换/隐式转换
(3)boolean类型不可以与其他数据类型转换
(4)一元数字提升(Unary Numeric Promote):将byte、short、char类型的一元数字自动提升为int类型;
执行它的条件:数组的索引、创建数组时的数组长度;一元运算符+和-;按位取反~;位移<<、>>、>>>;
public class First{
public static void main(String[] args) {
int[] array = { 11, 22, 33, 44 };
byte index = 2;
array[index] = 20; //byte自动变成int;可以将[]看成一元运算符
char c = 'A';
System.out.println(c);
System.out.println(+c);
}
}
(5)二元数字提升(Binary Numeric Promote):提升一个或两个数字;
任意一个数字是double类型,那么另一个就会被转换为double类型;(顺序为double、float、long、int);
执行它的条件:*、/、%、+、-、<、<=、>、>=、==、!=、&、^、| 、 ?:
byte v = 1;
v1 = v1 + 2; //错误
v1 += 2; //正确
//Java尽可能写复合赋值运算符
7.关键字、标识符
-----关键字一律用小写字母标识
(1)数据类型: boolean、byte、char、 double、 false、float、int、long、new、short、true、void、instanceof
(2)语句:break、case、 catch、 continue、 default 、do、 else、 for、 if、return、switch、try、 while、 finally、 throw、this、 super
(3)用于修饰: abstract、final、native、private、 protected、public、static、synchronized、transient、 volatile
(4)用于方法、类、接口、包和异常: class、 extends、 implements、interface、 package、import、throws
(5)无意义关键字:cat、 future、 generic、innerr、 operator、 outer、rest、var等
(6)Java有3个保留字:true、false、null,它们不是关键字,而是文字/字面量
-----标识符:变量名、方法名、类名
命名规则:Java字母(比较宽泛、有一个方法可以判断) + Java数字;不能使用关键词、以上三个字面量;
命名建议:小驼峰myNameAndAge(变量名、方法名)、大驼峰MyNameAndAge(类名)、全大写+下划线(全局常量)
8.数组(在Java中为引用类型)
(1)数组的创建
int[] arr1; //推荐写法
int[] arr2 = {}; //空数组
int arr3[] = {};
int[] arr4 = new int[] { 1, 2, 3, 4 };
int[] arr5 = { 1, 2, 3, 4};
int[] arr6 = new int[4];
int[][][] arr7;
int[] arr8[][];
(2)数组的内存
数组元素储存在堆空间;Java的堆内存申请会自动进行初始化
(3)数组的遍历
int[] arr = { 11, 22, 33, 44 };
for(int i = 0; i < arr.length; i++) { //arr.length是数组的一种属性
System.out.println(arr[i]);
} //第一种
for(int ele : arr) {
System.out.println(ele);
} //第二种
(4)
String[] arr = new String[4];
System.out.println(arr); //[Ljava.lang.String;@2ff4acd0
//@2ff4acd0是哈希值
System.out.println(arr.hashCode()); //804564176是哈希值
System.out.println(arr[1]); //null
int[] array = { 11, 22, 33 };
System.out.println(array[2]); //查找:array[0] + 2 * 4,随机访问
9.方法
(1)书写格式
修饰符 返回值类型 方法名(参数列表){
方法体
}
(2)可变参数
可变参数必须放在最后面
public class First{
public static void main(String[] args){
System.out.println(sum( 10, 20, 30 ));
}
public static int sum(int... numbers){
//numbers是数组,默认={}
int result = 0;
for(int num : numbers){
result += num;
}
return result;
}
}
(3)参数的传递
基本类型作为参数是值传递
引用类型作为参数是引用传递(地址传递)
public class First {
public static void main(String[] args) {
// int n = 10;
// test1(n);
// System.out.println(n);
int[] n = { 11, 22, 33};
test2(n);
System.out.println(n[0]);
}
// public static void test1(int v) {
// v = 20;
// }
public static void test2(int[] v) {
v[0] = 66;
}
}
//注释掉的为值传递;未注释掉的是地址传递
(4)返回值
public class First{
public static void main(String[] args){
int[] m = test();
for(int i = 0; i < m.length; i++){
System.out.println(m[i]);
}
}
public static int[] test(){
int[] n = { 11, 22, 33 };
return n; //返回的是地址
}
}
(5)方法签名(方法名 + 参数类型)
public static double sum(int i, long l, double d){
return i + l + d;
}
//方法签名:sum(int, long, double)
在同一个类中,不能定义2个方法签名一样的方法
(6)方法的重载
Java的方法支持重载:方法名相同,方法签名不同(参数个数/类型不同)
10.资料
注意: 按CTRL键可以看源码