大数据开发之路---Java基础(一)
因为最近工作用到java,所以了解一些java的知识,当然这篇文章也是适用于有语言基础的,因为是用于快速熟悉java的一些语法规范,并没有整理细节的内容,零基础的不适合看这篇文章
Hello world
老规矩先来hello world代码:
package study_java.ex01; public class HelloWorld { public static void main(String[] args){ System.out.println("hello world"); } }
注释
// 表示单行注释
/* */ 表示多行注释
Java语言的关键字
Java关键字的特点:
组成关键字的字母全是小写
常碰到的关键字有:
标识符要求(变量)
- 不能数字开头
- 不可以使用关键字
- 严格区分大小写
Java中的名称规范:
- 包含多词组组成时,都小写
- 类名接口名,多个单词组成时,使用大驼峰方式
- 变量名和函数名:多个单词组成时,小驼峰法
- 常量名:所有的字母都大写,多单词时每个单词用下划线连接
常量
不能改变的数值
整数常量
小数常量
布尔型常量
字符串常量
null常量
变量
数据类型 变量名 = 初始化值
变量的作用范围,就是它所在的{}内部
自动类型转换也叫隐式类型转换
强制类型转换也叫显式类型转换
package study_java.ex01; public class TypeConvert { public static void main(String[] args){ byte b = 100; int i = b; // 这里就是进行了隐式转换 byte b2 = (byte)i; // 这里是显式转换 System.out.println(b2); } }
表达式的数据类型自动提升:
byte short char 提升到int
byte b3 = 3; int x = 4; x = x + b3; // b3会自动提升为int类型进行运算 System.out.println(x);
运算符
算术运算符
赋值运算
= += -= *= /= %=
比较运算符
逻辑运算符
位运算符
关于三元运算
实例代码:
package study_java.ex01; public class IfDemo { public static void main(String[] args){ int age = 100; if(age <= 50){ System.out.println("小"); } else{ System.out.println("大"); } // 更改为三元运算 String str = age <= 50 ? "小":"大"; System.out.println(str); } }
流程控制
判断结构
选择结构
switch语句特点:
switch 语句只有四种类型的表达式:byte short int char
case 之间与default没有顺序,先执行第一个case,没有匹配的case执行default
结束switch语句有两种情况:遇到break, 执行到switch语句结束
如果匹配的case或者default没有对应的break,那么程序会继续向下执行,直到遇到break或者switch结束
代码例子:
package study_java.ex01; public class SwitchDemo { public static void main(String[] args){ char x = 1; switch(x){ case 1: System.out.println("x=1"); break; case 2: System.out.println("x=2"); break; case 3: System.out.println("x=3"); break; default: System.out.println("x=?"); break; } } }
循环结构
while循环
代码例子:
package study_java.ex01; public class WhileDemo { public static void main(String[] args){ int i = 0; while (i <= 10) { System.out.println(i); i++; } } }
代码例子2:
package study_java.ex01; public class WhileDemo2 { public static void main(String[] args){ int i = 1; int sum =0; while (i <= 100){ sum += i; i += 1; } System.out.println(sum); } }
do while 循环
代码例子:
package study_java.ex01; public class DoWhileDemo { public static void main(String[] args){ int i = 1; do { System.out.println(i); }while (i > 10); } }
for循环
代码例子:
package study_java.ex01; public class ForDemo { public static void main(String[] args){ for(int i = 0;i<10;i++){ System.out.println(i); } } }
打印一个九九乘法表:
package study_java.ex01; public class ForDemo3 { public static void main(String[] args){ for(int i = 1;i < 10;i++){ for (int j = 1;j <= i;j++){ System.out.print(j + "*" + i + "=" + i*j + "\t"); } System.out.println(); } System.out.println(); for (int i = 9; i>0;i--){ for (int j = 1;j<=i;j++ ){ System.out.print(j + "*" + i + "=" + i*j + "\t"); } System.out.println(); } } }
打印一个实心和空心的三角形
package study_java.ex01; public class ForDemo4 { public static void main(String[] args){ for(int i=1;i <= 5;i++){ for(int j = 1; j<=9;j++){ if (j <= 5-i){ System.out.print(" "); } else if (9-j < 5-i){ System.out.print(" "); } else { System.out.print("*"); } } System.out.println(); } System.out.println(); for(int i = 1;i<= 5;i++){ for(int j = 1;j<=9;j++){ if (i == 5){ System.out.print("*"); } else if (j == 5-i+1){ System.out.print("*"); } else if ( 9-j == 5-i){ System.out.print("*"); } else { System.out.print(" "); } } System.out.println(); } } }
函数
函数就是定义在类中的具有特定功能的一段独立小程序
函数也称为方法
修饰符 返回值类型 函数名称(参数类型 参数名称,…) {
执行语句;
return 返回值;
}
函数特点:
封装功能
重用
调用时才会被执行
对于函数没有具体的返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写
注意:
函数中只能定义调用函数,不可以在函数内部定义函数
定义函数时,函数的结果应该返回给调用者,交给调用者处理
一个简单的函数例子:
package study_java.ex01; public class FunctionDemo1 { public static void main(String[] args){ int res = add(10,20); System.out.println(res); } public static int add(int a, int b){ return a + b; } }
函数递归:
通过阶乘的两种写法来理解,其实就是自己调用自己:
public static int fabric(int n) { int res = 1; for (int i=1;i<=n;i++){ res *= i; } return res; } public static int fabric2(int n) { if (n == 1) { return 1; } else { return n * fabric2(n-1); } }
函数重载
在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可
重载的特点:
与返回值类型无关,只看参数列表
例子代码:
package study_java.ex01; public class FunctionDemo2 { public static void main(String[] args){ add(10,3,2); } // add public static int add(int a, int b){ return a+b; } // 重载add public static int add(int a, int b, int c){ return a + b + c; } // 重载add public static float add(int a, float b) { return a + b; } // 重载add public static float add(float a, int b) { return a + b; } }
函数的可变参数:
public static int multiply(int... xyz){ int sum = 0; for (int i =0;i <xyz.length;i++){ System.out.println(i); sum += i; } System.out.println(sum); return sum; }
数组
同一种类型数据的集合,其实就是一个容器
可以自动给数组中的元素从0开始编号,方便操作这些元素
元素类型[] 数组名 = new 元素类型[元素个数或者数组长度]
例子 int [] arr = new int[5]
或者:
元素类型[] 数组名 = new 元素类型[元素,元素,….]
int [] arr = new [1,2,3,4]
数组这里的一些练习题,通过一些排序来熟悉:
冒泡排序,以及选择排序
package study_java.ex01; public class BubbleDemo1 { public static void main(String[] args) { int[] arr = {1,4,90,22,12,20,99}; select(arr); for (int i =0;i<arr.length;i++){ System.out.println(arr[i]); } } public static void bubble(int[] arr){ int tmp = 0; for (int i= 0; i< arr.length -1;i++){ for (int j=0;j<arr.length -1 - i;j++){ tmp = arr[j]; if (arr[j] > arr[j+1]){ arr[j] = arr[j+1]; arr[j+1] = tmp; } } } } public static void bubble2(int[] arr){ int tmp =0; for (int i = 0; i < arr.length-1;i++){ for (int j=0;j<arr.length-1-i;j++){ tmp = arr[j]; if (arr[j] < arr[j+1]){ arr[j] = arr[j+1]; arr[j+1] = tmp; } } } } public static void select(int[] arr){ int tmp = 0; for(int i = 0;i < arr.length-1;i++){ int min_loc = i; for (int j=i+1;j<arr.length;j++){ if (arr[j] < arr[min_loc]){ min_loc = j; } } tmp = arr[i]; arr[i] = arr[min_loc]; arr[min_loc] = tmp; } } }