Java学习之入门

一、Java入门学习

  一)安装jdk

  1、下载jdk

  oracle官网jdk下载地址(要有oracle账号才能下): https://www.oracle.com/java/technologies/downloads/

  选择下载自己需要的版本以及符合硬件环境的安装包

  我下载的是Linux x64操作系统的安装包:jdk-11.0.16.1_linux-x64_bin.tar.gz

  2、安装jdk

mkdir -p /app/{3rd/java,download}

cd /app/download
# 上传安装包
tar -xvf jdk-11.0.16.1_linux-x64_bin.tar.gz -C /app/3rd/java
# 创建软连接,方便版本变更/切换
ln -s /app/3rd/java/jdk-11.0.16.1/ /app/3rd/java/jdk

 

  3、配置环境变量,并验证

cat > /etc/profile.d/java.sh <<EOF
export JAVA_HOME=/app/3rd/java/jdk
export CLASSPATH=.:\$JAVA_HOME/jre/lib/rt.jar:\JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar
export PATH=\$PATH:\$JAVA_HOME/bin
EOF

source /etc/profile.d/java.sh
java -version

  二)如何运行程序

  Java源码本质上是一个文本文件,需要先用javacHello.java编译成字节码文件Hello.class,然后,用java命令执行这个字节码文件:

  

  1、运行第一个程序

   hello.java

class Simple{  
    public static void main(String args[]){  
       System.out.println("Hello Java !");  
    }  
}

  这个定义被称为class(类),这里的类名是Hello,大小写敏感,class用来定义一个类,public表示这个类是公开的,publicclass都是Java的关键字,必须小写,Hello是类的名字,按照习惯,首字母H要大写。而花括号{}中间则是类的定义。

  程序运行步骤如下

第一步,在保存Hello.java的目录下执行命令javac Hello.java:

$ javac Hello.java
如果源代码无误,上述命令不会有任何输出,而当前目录下会产生一个Hello.class文件:

$ ls
hello.java  Simple.class
第二步,执行Simple.class,使用命令java Simple:

$ java Simple
Hello Java !

  2、注意事项

一个Java源码只能定义一个public类型的class,并且class名称和文件名要完全一致;

使用javac可以将.java源码编译成.class字节码;
使用java可以运行一个已编译的Java程序,参数是类名

  三)java程序基础

  1、java程序基本结构

/**
 * 可以用来自动创建文档的注释
 */
public class Hello {
    public static void main(String[] args) {
        // 向屏幕输出文本:
        System.out.println("Hello, world!");
        /* 多行注释开始
        注释内容
        注释结束 */
    }
} // class定义结束

  2、类名和方法名命名规范

注意到public是访问修饰符,表示该class是公开的。
不写public,也能正确编译,但是这个类将无法从命令行执行。

 

  类名要求:

  • 类名必须以英文字母开头,后接字母,数字和下划线的组合
  • 习惯以大写字母开头

  方法名也有命名规则,命名和class一样,但是首字母小写:

  Java有3种注释

第一种是单行注释,以双斜线开头,直到这一行的结尾结束:

// 这是注释...

第二种是多行注释
多行注释以/*星号开头,以*/结束,可以有多行:

/*
这是注释
blablabla...
这也是注释
*/
第三种特殊的多行注释
以/**开头,以*/结束,如果有多行,每行通常以星号开头:

/**
 * 可以用来自动创建文档的注释
 * 
 * @auther liaoxuefeng
 */

  3、基本数据类型

  基本数据类型是CPU可以直接进行运算的类型。Java定义了以下几种基本数据类型:

  • 整数类型:byte,short,int,long

  • 浮点数类型:float,double

  • 字符类型:char

  • 布尔类型:boolean

    数据类型占用的字节数不一样。Java基本数据类型占用的字节数

  

 

 

  byte恰好就是一个字节,而longdouble需要8个字节。 

    整型

  对于整型类型,Java只定义了带符号的整型,因此,最高位的bit表示符号位(0表示正数,1表示负数)。各种整型能表示的最大范围如下:

  • byte:-128 ~ 127
  • short: -32768 ~ 32767
  • int: -2147483648 ~ 2147483647
  • long: -9223372036854775808 ~ 9223372036854775807
    浮点型

  浮点类型的数就是小数,因为小数用科学计数法表示的时候,小数点是可以“浮动”的,如1234.5可以表示成12.345x102,也可以表示成1.2345x103,所以称为浮点数。

    布尔类型

  布尔类型boolean只有truefalse两个值

    字符类型

  字符类型char表示一个字符。Java的char类型除了可表示标准的ASCII外,还可以表示一个Unicode字符

public class Main {
    public static void main(String[] args) {
        char a = 'A';
        char zh = '';
        System.out.println(a);
        System.out.println(zh);
    }
}

  注意char类型使用单引号',且仅有一个字符,要和双引号"的字符串类型区分开。

    引用类型

  除了上述基本类型的变量,剩下的都是引用类型

引用类型最常用的就是String字符串:

String s = "hello";

  引用类型的变量类似于C语言的指针,它内部存储一个“地址”,指向某个对象在内存的位置

    常量

  定义变量的时候,如果加上final修饰符,这个变量就变成了常量:

final double PI = 3.14; // PI是一个常量
double r = 5.0;
double area = PI * r * r;
PI = 300; // compile error!

  常量在定义时进行初始化后就不可再次赋值,再次赋值会导致编译错误。

  常量的作用是用有意义的变量名来避免魔术数字(Magic number)

    var关键字
编译器会根据赋值语句自动推断出变量sb的类型是StringBuilder。对编译器来说,语句:

var sb = new StringBuilder();
实际上会自动变成:

StringBuilder sb = new StringBuilder();
因此,使用var定义变量,仅仅是少写了变量类型而已。
    变量的作用范围
在Java中,多行语句用{ }括起来。很多控制语句,例如条件判断和循环,都以{ }作为它们自身的范围,例如:

if (...) { // if开始
    ...
    while (...) { // while 开始
        ...
        if (...) { // if开始
            ...
        } // if结束
        ...
    } // while结束
    ...
} // if结束

  定义变量时,要遵循作用域最小化原则,尽量将变量定义在尽可能小的作用域,并且,不要重复使用变量名。

  4、运算

    整数运算
整数的数值表示不但是精确的,而且整数运算永远是精确的,即使是除法也是精确的,因为两个整数相除只能得到结果的整数部分:

特别注意:整数的除法对于除数为0时运行时将报错,但编译不会报错。

简写的运算符,即+=,-=,*=,/=,它们的使用方法如下:
n += 100; // 3409, 相当于 n = n + 100;
n -= 100; // 3309, 相当于 n = n - 100;

自增自减运算,++运算和--运算


位运算
位运算是按位进行与、或、非和异或的运算。


运算优先级
在Java的计算表达式中,运算优先级从高到低依次是:

()
! ~ ++ --
* / %
+ -
<< >> >>>
&
|
+= -= *= /=

 

    浮点运算
浮点数运算和整数运算相比,只能进行加减乘除这些数值计算,不能做位运算和移位运算。
在计算机中,浮点数虽然表示的范围大,但是,浮点数有个非常重要的特点,就是浮点数常常无法精确表示
    布尔运算
对于布尔类型boolean,永远只有true和false两个值。

布尔运算是一种关系运算,包括以下几类:

比较运算符:>,>=,<,<=,==,!=
与运算 &&
或运算 ||
非运算 !

  关系运算

关系运算符的优先级从高到低依次是:

!
>,>=,<,<=
==,!=
&&
||

  5、字符和字符串

在Java中,字符和字符串是两个不同的类型。

字符类型
字符类型char是基本数据类型,它是character的缩写。一个char保存一个Unicode字符:


一个英文字符和一个中文字符都用一个char类型表示,它们都占用两个字节。要显示一个字符的Unicode编码,只需将char类型直接赋值给int类型即可:


    常见的转义字符包括:
\" 表示字符"
\' 表示字符'
\\ 表示字符\
\n 表示换行符
\r 表示回车符
\t 表示Tab
\u#### 表示一个Unicode编码的字符

  字符串连接

Java的编译器对字符串做了特殊照顾,可以使用+连接任意字符串和其他数据类型,这样极大地方便了字符串的处理
如果用+连接字符串和其他数据类型,会将其他数据类型先自动转型为字符串,再连接:

  多行字符串

如果我们要表示多行字符串,使用+号连接会非常不方便:

String s = "first line \n"
         + "second line \n"
         + "end";
从Java 13开始,字符串可以用"""..."""表示多行字符串(Text Blocks)了。举个例子:

// 多行字符串
public class Main {
    public static void main(String[] args) {
        String s = """
                   SELECT * FROM
                     users
                   WHERE id > 100
                   ORDER BY name DESC
                   """;
        System.out.println(s);
    }
}

上述多行字符串实际上是5行,在最后一个DESC后面还有一个\n。如果我们不想在字符串末尾加一个\n,就需要这么写:

String s = """ 
           SELECT * FROM
             users
           WHERE id > 100
           ORDER BY name DESC""";
还需要注意到,多行字符串前面共同的空格会被去掉,即:

String s = """
...........SELECT * FROM
...........  users
...........WHERE id > 100
...........ORDER BY name DESC
...........""";
用.标注的空格都会被去掉。

  6、数组类型

  • 数组是同一数据类型的集合,数组一旦创建后,大小就不可变;
  • 可以通过索引访问数组元素,但索引超出范围将报错;
  • 数组元素可以是值类型(如int)或引用类型(如String),但数组本身是引用类型;
定义一个数组类型的变量,使用数组类型“类型[]”,例如,int[]。和单个基本类型变量不同,数组变量初始化必须使用new int[5]表示创建一个可容纳5个int元素的数组。

Java的数组有几个特点: 数组所有元素初始化为默认值,整型都是0,浮点型是0.
0,布尔型是false; 数组一旦创建后,大小就不可改变。 要访问数组中的某一个元素,需要使用索引。数组索引从0开始

 

  7、流程控制

  占位符

Java的格式化功能提供了多种占位符,可以把各种数据类型“格式化”成指定的字符串:

占位符    说明
%d    格式化输出整数
%x    格式化输出十六进制整数
%f    格式化输出浮点数
%e    格式化输出科学计数法表示的浮点数
%s    格式化字符串
    if 判断
if语句的基本语法是:

if (条件) {
    // 条件满足时执行
}
    switch 多重选择

  switch语句根据switch (表达式)计算的结果,跳转到匹配的case结果,然后继续执行后续语句,直到遇到break结束执行

使用switch语句时,只要保证有break,case的顺序不影响程序逻辑:

switch (option) {
case 3:
    ...
    break;
case 2:
    ...
    break;
case 1:
    ...
    break;
}
    while 循环
while条件循环。它的基本用法是:

while (条件表达式) {
    循环语句
}
// 继续执行后续代码
    do while循环
while循环是先判断循环条件,再执行循环。而另一种do while循环则是先执行循环,再判断条件,条件满足时继续循环,条件不满足时退出。它的用法是:

do {
    执行循环语句
} while (条件表达式);

  do while循环会至少循环一次

对1到100的求和用do while循环

public class Main {
    public static void main(String[] args) {
        int sum = 0;
        int n = 1;
        do {
            sum = sum + n;
            n ++;
        } while (n <= 100);
        System.out.println(sum);
    }
}

 

    for循环

  除了whiledo while循环,Java使用最广泛的是for循环

  for循环的功能非常强大,它使用计数器实现循环。for循环会先初始化计数器,然后,在每次循环前检测循环条件,在每次循环后更新计数器。计数器变量通常命名为i

for循环的用法是:

for (初始条件; 循环检测条件; 循环后更新计数器) {
    // 执行语句
}

  把1到100求和用for循环

public class Main {
    public static void main(String[] args) {
        int sum = 0;
        for (int i=1; i<=100; i++) {
            sum = sum + i;
        }
        System.out.println(sum);
    }
}

  break和continue

  • break语句可以跳出当前循环;
  • break语句通常配合if,在满足条件时提前结束整个循环;
  • break语句总是跳出最近的一层循环;
  • continue语句可以提前结束本次循环;
  • continue语句通常配合if,在满足条件时提前结束本次循环

  8、数组操作

    遍历数组

  通过for循环就可以遍历数组。因为数组的每个元素都可以通过索引来访问,因此,使用标准的for循环可以完成一个数组的遍历

public class Main {
    public static void main(String[] args) {
        int[] ns = {1, 4, 9, 16, 25, 36};
        for (int i=0; i<ns.length; i++) {
            int n = ns[i];
            System.out.println(n);
        }
    }
}

  排序顺序

  冒泡排序的特点是,每一轮循环后,最大的一个数被交换到末尾,因此,下一轮循环就可以“刨除”最后的数,每一轮循环都比上一轮循环的结束位置靠前一位。

常用的排序算法有冒泡排序、插入排序和快速排序等;

冒泡排序使用两层for循环实现排序;

交换两个变量的值需要借助一个临时变量。

可以直接使用Java标准库提供的Arrays.sort()进行排序;

对数组排序会直接修改数组本身。

 

posted @ 2022-10-08 11:51  思维无界限  阅读(239)  评论(0编辑  收藏  举报