JavaSE学习

idea快捷键

alt+enter:自动补全

ctrl+d:复制当前内容到下一行

ctrl+f5:程序再运行一次

100.for:自动生成循环一百次的for循环语句

fori+tab键:自动生成for循环

注释

Java中有三种注释:

  1. 单行注释://,快捷键Ctrl+/
  2. 多行注释:/* */,快捷键Ctrl+shift+/
  3. 文档注释:/**

​ *@Description Hello

​ *@Author ***

​ */

​ 其中@是描述符

Java数据类型

Java是一门强类型语言,即变量的使用要严格符合规定,所有变量要先定义后才能使用

Java数据类型分为两大类,基本类型和引用类型

1. 基本类型

  1. 整数类型

    • byte:一字节,-128–127
    • short:两字节,-32768–32767
    • int:四字节
    • long:八字节
    long a=30L;//long类型后面要加个L
    

    整数类型拓展:

    二进制0b;八进制0;十六进制0x

    //不同进制赋值
    int i = 10;
    int i1 = 010;//八进制
    int i2 = 0x10;//十六进制赋值 
    
  2. 浮点类型

    • float:四个字节
    float a=50.1F;//float类型后面要加个F
    
    • double:八个字节

    浮点数拓展:

    //float和double类型的两个值相同的数,他们的比较结果的布尔值是false
    float a = 0.1;
    double b = 1.0/10;
    //变量a和b的比较结果是false
    
    //因此银行业务中,表示钱不用float或者double,而是用BigDecimal(数学工具类)表示
    
    
  3. 字符类型

    • char:两个字节

    字符拓展:

    //字符在内存中存放的都是相应字符的数值,ASCII码或者Unicode码(表示方式:"u0061")
    
  4. boolean类型:占一位,只有true和false两种

2. 引用类型

类、接口、数组

类型转换

低————————————————————————>高

byte,short,char->int->long->float->double

  1. 自动类型转换:优先级由低到高会自动转换

  2. 强制类型转换:优先级从高到低需要前置类型转换

    double a = 1.5;
    int b = (int)a;//此时b为1
    

注意:

  • 不能对布尔值进行转换
  • 不能把对象类型转换成不相干的类型
  • 转换后可能会丢失精度或者溢出
  • JDK7新特性:数字之间可以用下划线分割,即10_0000_0000

变量

Java变量是程序中最基本的存储单元,包括变量名,变量类型和作用域。

type varname [=value][{,varname[=value]}];
//数据类型 变量名 = 值;可以用逗号隔开来声明多个同类型变量

变量命名要满足命名规则:字母、下划线、$开头,不能用标识符命名

变量作用域

  1. 类变量
  2. 实例变量
  3. 局部变量
public class Variable{
    static int allClicks=0; //类变量
    int age;
    String name;
    //如果不进行初始化会有默认值,int的默认值为0,String的默认值为null
    String str = "hello world"; 
    
    public void method(){
		int i = 0; //局部变量
    }
}

常量

常量:初始化之后就不能再改变的值

final 常量名 = 值;(常量名一般为大写字符)

final PI = 3.1415926;

变量的命名规范

image-20220701165628015

运算符

image-20220701165923173

  1. 自增、自减运算符
int a = 1;
int b = a++;//表示先把a的值赋给b,然后a再加一
/* 等同于
	int b =a;
	a = a+1;
*/

int c = ++a;//表示的a的值先加1,然后再把a的值赋给c
/* 等同于
	a = a+1;
	int c = a;
*/
  1. 逻辑运算符

注:该类运算符中存在一种短路现象,即如果运算符左边的值就已经能决定该表达式的值了,那么就不再计算该运算符右边的表达式了。

int c = 5;
boolean d  = (c<4)&&(c++<4);
System.out.println(d);//输出false

System.out.println(c);
//输出5,表示并没有执行(c++<4)这个表达式,因为逻辑运算符左边的表达式已经可以决定整个表达式的值了

  1. 位运算符
  • ^为异或

  • 移位运算符的效率很高,因此有时可以通过以为操作来实现乘方运算,左移一位相当于乘2,右移一位相当于除2

  1. 三元运算符
  • 表达式1?表达式2 :表达式3

    表示如果表达式1的值为真,那么整个表达式的值为表达式2的值,否则为表达式3的值

包机制

//语法格式
package pkg1.[pkg2[.pkg3..];//必须写在程序的最开头
/*包的命名格式一般是公司域名倒置
	如:com.baidu
*/

//导入要使用的包
import package pkg1.[pkg2[.pkg3..];

JavaDoc

javadoc是用来生成api文档的,需要在程序中写好文档注释

在命令行执行:javac 参数 程序文件名称

javadoc -encoding UTF-8 -charset UTF-8 Doc.java
#-encoding UTF-8 -charset UTF-8为参数,使中文字体可以展示出来
/**
 *@author xxx
 *version 1.0
 *since 1.5
*/
public class Doc{
    String name;
    /**
     *@author xxx
     *@param name
     *@return
    */
    public String test(String name){
		return name;
    }
}

在idea中生成api文档的方法:

  1. 点击IntelliJIDEA顶部的Tools菜单,选择GenerateJavaDoc选项

img

  1. 接下来在底部的Locale输入框配置语言和编码集,语言用zh_CN,代表中文,其他的输出和控制塔一致

img

  1. 接下来在底部的Locale输入框配置语言和编码集,语言用zh_CN,代表中文,其他的输出和控制塔一致

  2. 注意:生成的文档里面会有很多 .html 文件 正常

用户交互Scanner

Java提供了一个工具类,用来获取用户的输入。java.util.Scanner

基本语法:

Scanner s = new Scanner(System.in);

s.close();   //用完关闭

通过Scanner类的next()和nextline()方法获取输入的字符串,在读取钱一般要使用hasNext()与hasNextline()判断是否还有输入的数据。

next():

  • 一定要读取到有效字符后才可以结束输入
  • 对输入有效字符前遇到的空白,next()方法会自动将其去掉
  • 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
  • next()不能得到带有空格的字符串

nextline():

  • 以Enter作为结束符,即返回输入回车前的所有字符
  • 可以获得空白

类似还有输入整数或者其他类型的方法,如

nextInt()、nextFloat()

顺序结构

程序按顺序依次执行

选择结构

if语句:

if(表达式){
    //如果表达式为true要执行的语句
}else if(){
    //反之执行的语句
}.....

switch语句:

switch case语句判断一个变量与一系列值中某个值是否相等,每个值为一个分支

switch(expression){
    case value:
        //语句
        break;//可选,用来表示结束
    case value:
        //语句
        break;//可选
    //可以有任意数量的case语句
    default://可选,都不满足时执行的语句
        //语句
}//括号也表示结束

switch语句中的变量类型可以是:

  • byte、short、int、char、String(通过转换成哈希值实现的)
  • case标签必须为字符串常量或者字面量

注:

​ 在switch结构中的case分支下要写break语句,如果表达式与case分支的标签相匹配,但是该case分支里没有break语句,那么程序会顺序执行后面的case分支,直到遇到break语句或者到达default分支,或者遇到“}”才结束。

循环结构

while循环:

while(表达式){
    //循环语句
}
//表达式为真时一直循环下去

do while循环:

do{
    //循环语句
}while(布尔表达式)

while和do while的区别:

  • while先判断后执行,do while先执行后判断
  • do while至少被执行一次

for循环:

for(初始化;布尔表达式;更新){
	//循环语句
}
//不写布尔表达式,默认为真,也就是死循环

增强for循环:

主要用于数组或集合的遍历

for(声明语句 : 表达式){
	//代码语句
}

//例
int[] nums = {1,2,3,4,5};
for(int x:nums){
	System.out.println(x);
}

注:

​ 声明语句:声明新的局部变量,该变量的类型必须和数组类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。

​ 表达式:表达式是要访问的数组名,或者是返回值维数组的方法。

break continue

break用于强行退出循环,不执行循环中剩余的语句

continue语句,用于终止本次循环,接着执行下一次循环

带标签的break continue

break outer:中断当前循环并跳出标签所指的循环
continue outer:重新跳到标签的位置,并开始标签之后声明的循环

使用带标签的 break / continue 的原因是:为了跳出或重新开始多层嵌套循环。

clip_image001[1]

方法

Java方法是语句的集合,它们在一起执行一个功能。

  • 方法是解决一类问题的步骤的有序组合
  • 方法包含于类或对象中
  • 方法在程序中被创建,在其他地方被引用

方法的定义和调用

方法包含一个方法头和方法体:

  • 修饰符:可选,告诉编译器如何调用该方法,定义该方法的访问类型
  • 返回值类型:方法可能会返回值,用来说明返回值的类型,没有返回值用void修饰
  • 方法名:方法的实际名称,和形参列表共同决定一个方法
  • 参数类型:参数列表中的每个参数的类型
    • 形参:方法定义时说明的,用来接收方法调用时传递的实参值
    • 实参:调用方法时实际传给方法的数据
  • 方法体:方法体包含具体的语句,定义该方法的功能
修饰符 返回值类型 方法名(参数类型 参数名,参数类型 参数名,...,...){
    ...
    方法体
    ...
    return 返回值;
}

方法调用:

  • 调用方法:对象名.方法名(实参列表)

  • Java支持两种调用方法的方式,根据方法是否返回值来选择

    • 当方法返回一个值的时候,方法调用通常被当做一个值。例如:
    int a = max(30,40);
    
    • 如果方法返回值是void,方法调用一定是一条语句
    System.out.println("Hello World");
    

注:Java中都是值传递,没有引用传递

方法的重载

  • 重载就是在一个类中,有相同的函数名称,但形参不同的函数
  • 方法重载的规则:
    • 方法名必须相同
    • 参数列表必须不同(个数不同、或类型不同、或参数排列顺序不同等)
    • 方法的返回类型可以相同也可以不同
    • 仅仅返回类型不同不足以成为方法的重载
  • 实现理论:
    • 方法名称相同时,编译器会根据调用方法的参数个数、参数类型等逐个去匹配,如果匹配失败,则编译器报错。

命令行传递参数

如果希望在运行程序时给程序传递消息,需要考传递命令行参数给main()函数实现。

public class Demo{
    public static void main(String[] args){
        for(int i = 0; i < 10; i++){
			System.out.println("args["+ i +"]:" + args[i] );
        }
    }
}

可变参数

  • JDK1.5开始,Java支持传递同类型的可变参数给一个方法
  • 在方法声明中,在指定参数类型后加三个点(…)
  • 一个方法中只能指定一个可变参数,他必须是方法的最后一个参数。任何普通参数必须在它之前声明。
public static void printMax(double... numbers){
    if(numbers.length == 0){
		System.out.println("No argument passed!")
        rutrun;
    }
    
    double result = numbers[0];
    
    for(int i=1; i<numbers.length; i++){
        if(numbers[i]>result){
            result = numbers[i];
        }
    }
    
    System.out.println("This max value is " + result);
     
}

数组

数组的定义

  • 数组是想同类型数据的有序组合
  • 可以通过数组的下标来访问数组中的每个元素

数组声明创建

声明数组的语法

dataType[] arrayRefVar;//首选的方式

dataType arrayRefVar[];//效果相同,但不是首选方式

用new操作符来创建数组:

dataType[] arrayRefVar = new dataType[arraySize];

数组元素是通过索引访问的,数组索引从0开始

获取数组长度:arrays.length

声明在栈区,实例在堆区

数组的初始化

  • 静态初始化
int[] a = {1,2,3};

Man[] mans = {new Man(1,1),new Man(2,2)};
  • 动态初始化
int[] a = new int[2];
a[0] = 1;
a[1] = 2;
  • 默认初始化

数组是引用类型,他的元素相当于累的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量的方式被隐式初始化

数组的四个基本特点

  • 其长度是确定的。数组一旦被创建,他的大小就是不可以被改变的。
  • 其元素必须是相同类型,不允许出现混合类型。
  • 数组中的元素可以是任何数据类型,包括基本类型和引用类型
  • 数组变量属于引用类型,数组可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

数组边界

数组的大小是固定的,因此超过数组的大小会报错

  • 数组下标的合法区间:[0,length-1],如果越界就会报错

ArrayIndexOutOfBoundsException:数组下标越界异常

数组的使用

  • For-Each循环的方式来便利数组
  • 数组当作方法的形参
  • 数组作为方法的返回值类型

多维数组

多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其中的每个元素都是一个一维数组

int a[][] = new int[2][5];//数组a可以看成是一个2行5列的矩阵

Arrays类

  • 数组工具类java.util.Arrays,可以用其中的方法来操作数组

  • Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,从而可以不用使用对象来调用

  • 常用的功能:

    • 给数组赋值:fill()方法
    • 给数组排序:sort()方法
    • 比较数组中的元素是否相等:equals()方法
    • 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找

    未完待续。。。。。

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » JavaSE学习