java基础入门
java三个版本
javaSE:基础版 standard edition
javaME:移动版
javaEE:企业版,大型系统,大型网站
java 是一门夸平台的语言,一次编写,处处运行
原因:java有各种类型的jvm,并且jvm不跨平台
代码(java) -> 编译(class) -> 执行(class)
java组成
jvm:java虚拟机
jre:jvm+核心类库 只能运行java程序,但不能开发
jdk:jre+运行环境工具 既能运行java程序,又能进行开发
jvm<jre<jdk
环境配置:
下载jdk安装
环境变量:
JAVA_HOME:jdk安装的根目录
path: %JAVA_HOME%\bin
classpath 不用建
基础命令:
编译命令:javac java文件名带后缀(实际编译文件为.java文件,编译产生.class字节码文件)
运行命令:java java文件名不带后缀(运行文件为.class字节码文件)
java程序结构详解
hello world
public class main {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}class后面的称之为“类名”
public class后面的类名,必须和文件名保持一致
一个文件可以有多个类(class),但是只能有一个公共类(public class)
System.out.println("Hello world!");输出语句
大括号(各种括号)成对出现,要缩进
程序的入口是main()方法
java文件中有汉字,并且javac编译时出现 错误提示“错误:编码GBK的不可映射字符” 解决:文件编码改为ANSI编码
转义字符
转义字符(ASCII码值【十进制】) 意义
\b(008) 退格(BS),将当前位置移到前一列
\f(012) 换页(FF),将当前位置一道下页开头
\n(010) 换行(LF),将当前位置移到下一行开头
\r(013) 回车(CR),将当前位置移到本行开头
\t(009) 水平制表(HT)(跳到次啊一个TAB位置)
\\(092) 代表一个反斜字符\
\'(039) 代表一个单引号(撤号字符)
\"(034) 代表一个双引号字符
\?(063) 代表一个问号
\0(000) 空字符(NULL)
\ddd(三位八进制) 1到3位八进制数所代表的任意字符
\xhh(十六进制) 十六进制所代表的任意字符
注释
单行注释 //
多行注释 /* */
文档注释 /** */ 将程序生成一个说明文档,则说明文档中的,说明文字就是通过文档注释生成的
public class main {
/**
* hello
* @param args
*/
public static void main(String[] args) {
// System.out.println("Hello world!");
/* System.out.println("Hello world!");
System.out.println("Hello world!");*/
System.out.println("Hello world!");
}
}数据类型详解
IDEA快捷键:
mian快捷写法:psvm +tab
输出语句:sout + tab
多行注释: 选中 Ctrl+/
..........................
变量
变量存在于内存(运行结束变量失效)
声明 赋值 使用
java的数据类型:
原生数据类型(基本数据类型):8个:
数字:
整数:byte<short<long 默认int
小数:float<double 默认double
一般性原则:尽量使用最小范围
非数字:
字符char char c = 'a' 单引号 只能一个字符
布尔boolean true / false
引用数据类型(对象类型):String 字符串
字节byte=8bit(-128~127)
短整数short=2byte
整数int=4byte
长整数long=8byte
float=4byte
double=8byte
Java 基本数据类型的默认值和占用大小:
赋值
=:赋值符号,右侧赋值给左侧
变量名规范:首字母小写的,驼峰法 myValue
float x = 13.4(错误写法)
float x = 13.4f
float x = (float)13.4
short x = 1 正确
小数=等号 += -=不带转换器
整数=等号 += -=自带转换器
变量使用要赋初值
变量名代表变量,不能重复
变量名区分大小写
java可以表示 的进制
二进制:0b数字 0b011表示3
十进制:默认
八进制:0数字 011表示9
十六进制 0x
变量命名规则(强制性)
首字符+其他
a.首字母:各国语言,下划线,钱
b.其他:首字母
c.不能是关键词
-d.符号只能是下划线和钱
变量的范围:最近一对大括号
+号的用法:加法,拼接
默认包:java的默认包是java.lang,即该包中的所有类回自动导入,不必在写import
从控制台输入:
public class main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
double d = scanner.nextDouble();
float f = scanner.nextFloat();
String s = scanner.nextLine();
s = scanner.next();
}
}Scanner scanner = new Scanner(System.in);
scanner.netXxxx()接收各种类型,除了char Scanner没有接收char的方法next()和nextLing()区别
next()不接受空格回车,并且将空格回车作为终止符号
nextLine()接收空格回车
阅读异常:
从上往下看,看到自己出错代码行号位置
类型转换
自动转换
范围小的类型可以自动转换为范围大的类型
范围小的类型遇到范围大的类型可以转为范围大的类型
整数<小数
“最大整数是字符串”:任何类型遇到字符串,自动转为字符串
char<int
强制转换
范围大的给范围小的,必须强转
通用写法:范围小的 = (小类型)范围大的
特殊:float x = 1.23f float x = (float) 1.23
算术运算符详解
算术运算符:
+ - * /
%:求余 取模
% : 有符号问题,结果永远和第一个数被除数相符
关系运算符(比较运算符):
< > >= <= == !=
字符串比较用equals() !equals()
关系运算符的运算结果是boolean值 true false
遇到优先级问题使用小括号
两数交换:中间变量,加减法(溢出),位运算
1. 使用中间变量
这种方法是最直接也是最容易理解的方式,通过引入一个临时变量来保存其中一个值,然后进行交换。
public class SwapNumbers {
public static void main(String[] args) {
int a = 5;
int b = 10;
// 使用中间变量交换
int temp = a;
a = b;
b = temp;
System.out.println("a: " + a + ", b: " + b);
}
}
2. 加减法 利用加减操作来实现交换,需要注意的是这种方法可能会导致整数溢出的问题,特别是在两个数非常大的情况下。
public class SwapNumbers {
public static void main(String[] args) {
int a = 5;
int b = 10;
// 使用加减法交换
a = a + b; // a 现在是 15
b = a - b; // b 变成原来的 a 的值 5
a = a - b; // a 变成原来的 b 的值 10
System.out.println("a: " + a + ", b: " + b);
}
}
3. 位运算 利用异或操作来实现交换,这种方法不会产生溢出问题,并且不需要额外的存储空间。
public class SwapNumbers {
public static void main(String[] args) {
int a = 5;
int b = 10;
// 使用位运算交换
a = a ^ b; // a 现在是 5^10
b = a ^ b; // b 变成原来的 a 的值 5
a = a ^ b; // a 变成原来的 b 的值 10
System.out.println("a: " + a + ", b: " + b);
}
}
逻辑运算符
!:不等于
两个符号:根据真值表判断(短路原则)
&&
||
一个符号:左右都判断
&
|
i++ 先用后加
++i 先加后用
特例:
byte+byte = int short + short = int
a=a+b a+=b区别 +=有转换器 a = a+ b无转换器
byte+=byte 正确 byte= byte+byte错误
三目运算符:
c = a>b ? a : b boolean运算为真 赋值a 为假赋值b
小数运算遇到问题:
3*0.3f 运算结果0.90000004
float小数,无穷无尽个小数,2的32次方的位置无法容纳所有小数
二进制 无法表示
选择结构
if
if(布尔条件)
{
....................//条件为真 则执行
}
if后面只有一条语句 ,则{}可以省略(但不建议)
如果有多条语句,则{}不能省略
if...else...
if(布尔条件)
{
....................//条件为真 则执行
}
else
{
....................//条件为假则执行
}
简单赋值可以使用三目运算符简化
随机数:
Math.random(); [0,1]
n位随机数
public static int generateNBitRandomNumber(int n) {
// 计算 n 位数的最小值和最大值
int minValue = (int) Math.pow(10, n - 1); // 最小值
int maxValue = (int) Math.pow(10, n) - 1; // 最大值
// 生成随机数
double randomValue = Math.random();
int randomNumber = (int) (randomValue * (maxValue - minValue + 1)) + minValue;
return randomNumber;
}多重if else
if(布尔条件)
{
....................//条件为真 则执行
}
else if(布尔条件)
{
....................//条件为真则执行
}
else
{
....................//条件都不满足则执行
}
多重if else 编写顺序:严格优先判断,(>/>=,数字越大越优先判断;</<=数字越小,越优先判断》)
嵌套if
if()
{
if()
{
}
}
else{}
区别:
多重if和嵌套if : 判断是否同一件事,是多重,否嵌套
switch
switch(x)
{
case 1:
............;
break;
................
default:
..............
break;
}
switch后支持的表达式类型:int,short,byte,char,String,枚举
Java5 以前 switch(expr)中,expr 只能是 byte、short、char、int。
从 Java 5 开始,Java 中引入了枚举类型, expr 也可以是 enum 类型。
从 Java 7 开始,expr 还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。
switch 会用x和所有case比较,一直执行case语句 都不匹配,执行default语句
break一般不省略,否则回继续执行case后续case语句
default可以省略
switch遇到break或者最后大括号结束
case 不能重复
区别:
多重if和switch:如果判断区间值,多重if,如果是离散值/单点值,switch
input.hasNextInt 判断输入是否为数字
循环:重复执行的事情
程序中的循环 = 循环条件 + 循环操作
while
while(循环条件)
{
循环操作
}
循环要更新变量,防止死循环
do while
do
{
循环操作
}while(循环条件)
do..while 先执行后判断
至少执行一次
for循环:while的变体
for(int i=0;i<100:i++)
{
sum++;
}
等价while
int i=0
while(i<100)
{
sum++
}
while 先判断后循环
do..while 先判断后循环
for 循环此时已知, 始末条件未知的
continue和break
break 退出循环,终止循环
continue 跳出当前循环,继续下一次循环
仅对当前层次有效
二重循环
循环内嵌循环,循环要完整
while()
{
if()
{
while()
{
}
}
}
Comments