前端的内容暂时先告一段落,现在开始对java做基本的了解(好耶)
这将是我第一门开发语言
目前主要按照廖雪峰的java教程进行 当年学python的时候也是看的他的教程呢(还有莫烦)
java简介
java由詹姆斯高斯林开发 介于编译型语言和解释型语言之间
编译型语言:c/c++ 将代码编译为机器码然后执行
解释型语言:python/ruby 解释器加载源码后直接运行 但效率低一些
Java将代码编译为一种字节码 针对不同平台编写虚拟机 因此可以在不同的平台上通过虚拟机运行
从实践上看 JVM的兼容性非常好 因此Java也成为了世界最流行的语言之一
java程序入门
怎么用java写出hello world?
public class Hello {
public static void main {
System.out.println("Hello World!");
}
}
来看一下这段代码
首先 public是java中最常见到的语句 表示该类是公开的 class则是声明一个类 Hello
在类属性中 我们使用public static void来声明一个类方法 这个方法名为main 该方法接受一个参数 类型为String[] 参数名
为args static意思为该方法为静态方法
该方法的内容为 打印语句hello world
在java中,使用public static void main(String[] args)
是java程序的固定入口方法 java程序总是从main开始执行
接下来我们分析java程序的结构
/**
* 可以用来自动创建文档的注释
*/
public class Hello {
public static void main(String[] args) {
// 向屏幕输出文本:
System.out.println("Hello, world!");
/* 多行注释开始
注释内容
注释结束 */
}
} // class定义结束
类名必须以英文字母开头
一般用大写字母开头
void表示main方法没有返回值
java入口程序规定的方法必须是静态方法
方法一般用小写字母开头
注意 在java中每一行语句必须以分号结束(python程序员落泪)
java注释有多种写法
单行使用//
段落使用/* */
多行使用
/**
*
*
*/
变量 数据类型
python程序员从来不声明变量的类型 但作为优秀的开发语言 java必须关注数据类型
例如
int x = 1;
在语句中声明了x为int型变量 默认值为0
重新赋值时,不需要再声明变量的类型
基本数据类型:
- 整数类型:byte,short,int,long
- 浮点数类型:float,double
- 字符类型:char
- 布尔类型:boolean
在计算机中,一个字节byte由8个bit组成 即 00000000~11111111 十六进制 00~ff
不同类型的变量 所占用的字节数不同
byte 1
short 2
int 4
long 8
float 4
double 8
char 2
各类型的十进制范围
- byte:-128 ~ 127
- short: -32768 ~ 32767
- int: -2147483648 ~ 2147483647
- long: -9223372036854775808 ~ 9223372036854775807
在java中 char型变量赋值用单引号 字符串用双引号
上述基本变量之外的变量均为引用类型 如字符串String
引用类型的变量类似于指针 他们存储了某个对象在内存中的位置
使用final来定义变量 该变量则成为一个常量 常量不能被再次赋值
final double PI = 3.14
若类型的名称过长 可以使用var来生成新变量
定义变量时,要遵循作用域最小化原则,尽量将变量定义在尽可能小的作用域,并且,不要重复使用变
量名。变量的作用域是所在代码块的区域,即{}包含的区域
运算符
基本运算符 + - * / %
注意 / 只能得到整数 并且在java中要注意溢出问题
+= -= ++ --
和python一样
移位运算符 <<1
>>1
分别表示左移 右移一位
使用 >>>
则不会管符号位 直接右移
位运算符 & | ~ ^
分别为与 或 非 异或
布尔运算包括比较、与、或、非
比较 > >= < <= == !=
与 &&
或 ||
非 !
三元运算符 x >= 0 ? n : -n
字符和字符串
对于字符串 字符串中有",可以使用转义符\
String s = "abc\"xyz"
两个\表示一个\
字符串可以使用 + 连接
对于int型的变量,可以使用(char)a来将其视作unicode编码转换为字符
int a = 100;
String s = "" + (char)a
数组类型
定义一个数组类型的变量如下
int[] ns = new int[5];
ns[0] = 1;
ns[1] = 2;
使用ns.length
即可获取数组大小
可以在数组生成时对元素进行初始化
int[] ns = new int[] {6,45,79,7,56};
或者
int[] ns = {6,45,79,7,56};
注意 数组是一种引用类型 也就是说 无论对数组进行怎样的修改 数组元素本身并没有变化 而是数组每个
位置指向的地址变了
流程控制
输入输出
System.out.print();
System.out.println();
print()
是不换行的 println()
将会换行
使用printf()
可以对输出做格式化
输入则更加复杂
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 创建Scanner对象
System.out.print("Input your name: "); // 打印提示
String name = scanner.nextLine(); // 读取一行输入并获取字符串
System.out.print("Input your age: "); // 打印提示
int age = scanner.nextInt(); // 读取一行输入并获取整数
System.out.printf("Hi, %s, you are %d\n", name, age); // 格式化输出
}
}
首先导入 Scanner
生成一个Scanner对象 调用 nextLine 得到输入字符串 调用nextInt得到输入的整数
if语句
if (条件) {
///
}
java的if写法和js相同
if (条件){
///
}else{
///
}
同理 else if也是可以使用的
在java中 判断值变量的值是否相等 使用==
注意 如果是引用变量
则==
比较的是他们是否指向同一个对象,而不是对象的内容是否相同
要和python中的==
相同 应该使用equals()
方法
if s1.equals(s2){
///
}
注意 Null对象是不能使用equals方法的 必须判断变量是否为null变量
switch语句
和js一样
switch(option){
case 1:
///
break;
case 2:
///
break;
case 3:
///
break;
default:
///
break;
}
default 在option没有任何case匹配时生效
switch在匹配字符串时,比较的是内容相等
while/do while/for
while (条件) {
///
}
do {
///
}while (条件)
for (int i=0;i<100:i++) {
///
}
在for循环中 若 i 定义在for之外 则在循环结束后仍然可以访问i 否则i是无法被访问的
for each循环用于直接访问数组变量
int[] ns = {1,2,3,4,5,6};
for (int n : ns){
System.out.print(n);
}
for each可以遍历所有可迭代对象 包括 list map等等
在循环中 使用break 和continue来控制循环
数组操作
遍历数组 可以使用for for each循环来进行
也可以使用Arrays.toString()
来打印数组内容
排序算法常用的有 冒泡 插入 快速排序
冒泡:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
// 排序前:
System.out.println(Arrays.toString(ns));
for (int i = 0; i < ns.length - 1; i++) {
for (int j = 0; j < ns.length - i - 1; j++) {
if (ns[j] > ns[j+1]) {
// 交换ns[j]和ns[j+1]:
int tmp = ns[j];
ns[j] = ns[j+1];
ns[j+1] = tmp;
}
}
}
// 排序后:
System.out.println(Arrays.toString(ns));
}
}
注意 交换需要借助一个临时变量
调用Arrays.sort()
也可以完成排序
对数组排序相当于修改了数组本身
多维数组即数组的数组
public class Main {
public static void main(String[] args) {
int[][] ns = {
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 }
};
System.out.println(ns.length); // 3
}
}
上面是一个二维数组
遍历二维数组可以用两层循环
public class Main {
public static void main(String[] args) {
int[][] ns = {
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 }
};
for (int[] arr : ns) {
for (el : arr) {
System.out.print(el + ',')
}
}
}
}