gtb-2 java基础(前端选手视角)

知识分享官 2024-07-21 13:33:02 阅读 88

安装java并配置环境变量

下载地址:Java Archive | Oracle

系统变量-新建名为<code>JAVA_HOME的环境变量,指向java安装目录系统变量-PATH,编辑新建%JAVA_HOME%\bin

tips : 注意点确定

目的: 使得我们在任何目录位置都可以执行 java 命令

卸载java

应用程序中卸载删除安装目录删除系统环境变量,及环境变量指向的安装目录win+_r 输入 regedit 找到HKEY_LOCAL_MACHINE -> SOFTWARE -> JavaSoft 点击删除

前置知识

java版本区别:从内容上看 EE > SE > ME ( Enterprise > Standard > Micro)

名词解释

JRE : Java Runtime EnvironmentJDK : Java Development Kit ( JRE + tools such as compiler , debugger)

java包命名规范

在不同的包名区分下,包里面可以有名称不同的类

包命名约定:

小写形式

公司使用反向域名 如yikina w.com的包名为com.w yikina

如果存在特殊字符- _ 关键字 数字等情况,为包名添加下划线_

java本身的包以java.javax开头

java基础

基本结构

java是面向对象的编程语言,以一个class作为主程序体,基本形式如下:

java

代码解读

复制代码

/** * class描述注释 */ public class Hello {    public static void main(String[] args) {        System.out.printIn("Helllo,world!");        //这里是注释   } }

class名称大写 ,方法名称小写 eg: Hello main

有修饰符 public``static ,有返回值类型 void ,有方法输入的参数类型String[] args

main方法写法固定 public static void main(String[] args){...}

tips:idea中可以使用ctrl+alt+l快速格式化代码

变量和数据类型

java变量和数据类型分为:基本类型、引用类型

变量

整理了这份面试笔记包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题

需要全套面试笔记【点击此处】即可免费获取

基本变量

声明时使用类型修饰符,如int

ini

代码解读

复制代码

int a;  //不写声明值,指定默认值为0 int x = 100; x = 200; //可以被反复赋值 int n = x; //可以声明变量为另一个变量 n = n + 100; //可以被自己反复赋值

原理: 和js基本数据类型差不多,在内存中有固定地址存储数据,绝对引用

数据类型
基本类型

整数类型:byte \ short \ int \ long浮点数类型: float \ double布尔类型: boolean字符类型: char

区别:所占内存数量不同( 前置知识 :byte(字节)=8 bit(8位二进制数),1024byte = 1k ,1024 k =1M ,1024M = 1G , 1024G=1T)

具体而言:

整型

byte:-128 ~ 127short: -32768 ~ 32767int: -2147483648 ~ 2147483647long: -9223372036854775808 ~ 9223372036854775807

tips:

long类型定义的变量结尾要加L ,否则为int long n=80000L

小数值可赋值给大数值,反之不可

浮点型

float: 3.4x10(38)double: 1.79x10(308)

tips: float类型要加上f后缀 ,如 float n=3.14f

布尔型

boolean : true || false (4 byte)

字符型

char : 一个字符' ' (ASCII \ Unicode)

也可以使用\u+Unicode编码来表示:\u0041

tips: 一个字符,‘ ’ 单引号,区分" "双引号字符串

引用类型

String : 字符串 “ ”

原理 :类似js中的引用类型,内部存储指针,指向真正存在的位置,相对引用

详见下面字符串

作用域

和 js 一样的部分:{ } 为一个作用域

区分js : 没有闭包,尽可能将变量定义在小作用域,且不要重复使用变量名

demo.js

javascript

代码解读

复制代码

{    let a=5;   {        let a =3;        console.log(a);  //a=3   }    console.log(a); //a=5 }

demo.java

java

代码解读

复制代码

{    int x=5;   {        int x=3 //编译时异常,上一个x作用域还没有结束   } } ​ {   {        int x=5;   }    int x=3; //可以这样定义,因为上一个x作用域结束了,虽然这么是可以的但是最好好像不要用重复的变量名声明 }

常量

初始化后不可再次赋值(只读的),使用final修饰符,全部使用大写

java

代码解读

复制代码

final double PI=3.14

用法:类似于shell中的declare -r ,用于替换经常使用的数据or地址or名称

var关键字

类名太长的简略写法:

java

代码解读

复制代码

//普通 LongExample le = new LongExample(); //使用var var lg - new LongExample;

运算

按照四则运算规律,可以使用小括号。

和js一样可以使用 +=``-=``++``--

tips:++n (先+1再引用n) n++ (先引用n再+1)

整数运算

整数运算的结果永远是整数

溢出:整数运算结果超出范围限制而产生的奇怪结果。解决:换更大范围的整数类型

移位运算 ( int,如使用byte\short会先转化为int )

原理:将数据换算为二进制左移或右移

java

代码解读

复制代码

int n=7; //00000111=7 int a=n<<1 //00001110=14 int b=n>>1 //00000011=3

位运算

& | (与js中一样,&两个同时为真才为真,| 任意一个为真就为真)

~ (0和1互换)

java

代码解读

复制代码

int n= ~0 //1 int n= ~1 //0    

^ (比较两个数,相同为1,不同为0)

java

代码解读

复制代码

n = 12 ^ 12 //1 n = 21 ^ 56 //0

类型自动提升、强制转型

结果前面加()强制转型,但超出范围的结果可能是错误的

java

代码解读

复制代码

int a=5; short b=(short)a;

参与运算的数类型不同,结果为较大范围的

eg: int + long =long

浮点数运算

与整数相比,不能进行位运算移位运算

浮点数计算会产生误差(原因:有些浮点数[0.1]十进制转换为二进制是无限循环小数 )

比较浮点数是否相等——两数绝对值<很小的数

java

代码解读

复制代码

double r=Math.abs(x-y); if(r<0.0001){ //基本可以认为是相等的}

溢出:除数为0时会返回 NaN Infinity``-Infinity

类型提升 、强制转化:

浮点数+整型 =浮点数强制转化浮点数->整数时,小数部分会直接被丢掉,超过范围会返回最大值

布尔运算

和js一致可以使用 >``>=``==``!=``&&``||``!

短路运算 ( && || ) : 和js一致,&&(前面为真才执行后面),||(前面有一个为真就执行那个)三元表达式:和js一致,但后面两个比较的类型要一致

字符串string

区分char,string使用“ ”,里面包含多个字符

转义:在引号中使用 \

java

代码解读

复制代码

String s ="qaz\"qwe"

tips\表示一个``符 , \n换行符

字符串连接 :和 js 一样,使用+连接,如其他类型会自动转换为字符串

多行字符串,使用三个引号表示 """ 这里写多行数据不用加换行符 """,会默认换行且以行首最短的空格为准

不可变特性(引用类型)

字符串本身是不变的,变的只是变量指向它的指针

java

代码解读

复制代码

public class Main { public static void main(String[] args) { String s = "hello";//内存开辟一个空间存储hello String t = s; s = "world"; System.out.println(s); //world,但这并不代表hello改变了,只是没有变量能指向它了,它仍然在内存中 System.out.println(t); // hello,设定变量时t指向s->hello } }

null表示该变量不指向任何对象,区分" "空字符串(指向一个字符串对象,内容为空)

数组

与js不同,

java创建数组时就要确定数组容纳的数据类型及长度,且创建后不得改变数组所有元素初始化都为默认值 (0/0.0/false)-》js es6 undefined

定义数组的方式:

java

代码解读

复制代码

int[] stu = new int[5]; //stu是int数据类型长度为5的数组 int[] stu = new int[] {34,66,78,99,54}; //不用写出数组长度 int[] stu={34,66,78,99,54} //最佳简化写法 System.out.println(stu.length); //5,获取数组长度用length,c#中是Length

引用类型特性(指针引用,和字符串那里一样去理解就行)记住基本数据类型存储的值,引用类型存储的是指针

java

代码解读

复制代码

public class Main { public static void main(String[] args) { String[] names = {"ABC", "XYZ", "zoo"}; String s = names[1]; names[1] = "cat"; System.out.println(s); // "XYZ" } }

流程控制

输入与输出

输出

java

代码解读

复制代码

//输出后不换行 System.out.print("huhuh") //输出后换行->print line System.out.printIn("jlkjlk")

格式化输出 System.out.printf (print formatter)

java

代码解读

复制代码

double d = 3.1415926 System.out.printf("%.2f\n",d)//显示两位小数

常见占位符:

%d格式化输出整数、%f格式化输出浮点数、%s格式化输出字符串

输入

引入Scanner对象,有点类似c#

java

代码解读

复制代码

import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("Input your last grade:"); int lastG = sc.nextLine(); }}

其他语句

if else : 基本用法一致

==判断引用类型也会和js一样根据是否指向同一个对象判断,如需判断引用类型变量的内容是否相等,使用equals s1.equals(s2)

switch : 经典写法注意case,break,default

java12后写法(不需要break,可以直接赋值)

java

代码解读

复制代码

swith(color){ case "red" -> System.out.println("select red"); case "yellow" -> System.out.println("select yellow"); default -> { System.out.println("no choice"); System.out.println("have a good luck"); } } //用switch给变量赋值 int num=swith(color){ case "red" -> 1; case "yellow" -> 2; default -> { int a=0; yield a; //{}中使用yield作为返回值 }; } }

while (先判断条件,在执行循环) do...while(先执行一次循环,再判断条件)

for循环:1和js一致(把let改为数据类型int就可以了...)

java中的foreach循环 for( int n : array)->可以用于所有可迭代的数据类型

java

代码解读

复制代码

int[] ns={1,2,3,4,5} for (int n :ns){ System.out.println(n); }

kotlin

代码解读

复制代码

- break :跳出当前这一层循环 contiune: 提前结束这一次的循环,下一次循环继续进行

数组

遍历数组

for循环遍历 for(int i=0;i<nums.length;i++)

foreach遍历 for(int n : nums)

Arrays.toString(arrayname) :字符串形式打印

java

代码解读

复制代码

int[] nums={1,2,3,4} System.out.println(Arrays.toString(nums)) // [1,2,3,4]

数组排序

Arrays.sort(arrayname)

(注意排序后的数组是否改变要看其是基本类型还是引用类型)

二维数组

java

代码解读

复制代码

int[][] nums={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} }

打印二维数组

二层循环

java

代码解读

复制代码

for(int[] n:scores){ for(int s:n){ ... } }

Arrays.deepToString()

命令行参数

需求:命令行输入参数-version,程序输出对应结果

实现:通过main方法接受命令行参数args

java

代码解读

复制代码

public class Main{ public static void main(String[] args){ for(String arg:args){ if("-version".equals(args)){ System.out.println("v 1.0"); break;} } } }



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。