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