java基础
Java基本格式
修饰符 class 类名{
程序代码
}
编译
是指将已经完成的Java源程序编译为计算机可识别运行的class文件 javac(空格)名称.java
运行
java(空格) 名称 不带.java!!不带.java!!不带.java!!
方法定义*
定义格式: 修饰符 返回值类型 方法名 (参数列表){ 代码... return ; }
定义格式解释: 修饰符: 目前固定写法 public static 。 返回值类型: 目前固定写法 void ,其他返回值类型在后面的课程讲解。 方法名:为我们定义的方法起名,满足标识符的规范,用来调用方法。 参数列表: 目前无参数, 带有参数的方法在后面的课程讲解。 return:方法结束。因为返回值类型是void,方法大括号内的return可以不写。
注释
-
单行注释
//
-
多行注释 键入/*
/*
我是多行注释
我是多行注释
*/
-
文档注释
对一段代码概括性的解释说明 键入/**
/**
*我是文档注释
*我是文档注释
*/
标识符
类似 public、class、if 等
-
Java对大小写敏感
-
所有标识符都应以字母(A-Z或者a-z),美元(¥),下划线(_)开始
-
首字符后可为符合要求的任意组合
-
不能使用关键名作为变量名或方法名
-
不以数字作为开头
-
类名和接口名单词首字母尽量大写
-
常量名所有字母都要大写 字母之间利用下划线链接 : ZOE_SIMON_GULU
-
变量名和方法名第一个单词首字母小写 从第二个开始大写 : lineNumber
-
尽量使用有意义的英文作为变量名
-
合法标识符:_1、Ahello、ahello、$534、__123
-
不合法:1aur、-wwol、#3we、public
运算符
算术运算符
-
+-*/四则运算
-
++--自增自减 %求余
-
注意: 计算顺序、两整数进行除法运算时会忽略小数部分
-
求余运算时:运算结果正负取决于%左数值,与其右侧数值无关。例如:(-5)%3 = -2 而5%(-3)= 2
自增自减:注意分清前后,若运算符在操作数前则先进行自增自减,若运算符在操作数后则先进性赋值后后进行运算
public class Demo02 {
public static void main(String[] args) {
// ++ -- 自增 自减 一元运算符
int a = 3;
System.out.println(a);//3
int b = a++;// a = a+1 先将a的值赋给b 此时b=3 赋值之后自增a=a+1
System.out.println(a);//4 先赋值后自增 故输出a=4
System.out.println(b);//3
int c = ++a;//先自增后赋值 此前a=4 故先自增a=5 后将a=5的值赋给C 输出c=5
System.out.println(a);//5
System.out.println(b);//3
System.out.println(c);//5
System.out.println("================================================");
//幂运算 Math.pow(2.4)返回值后如下*(不做基础要求)
int _0 = 2*2*2*2;
System.out.println(_0);
double pow = Math.pow(2, 4);//16.0
System.out.println(pow);
}
}
赋值运算符
-
=,+=,-=,*=,/=,%=
-
赋值、加等于、减等于、乘等于、除等于、模等于
-
以“+=”为例,“a+=3”即为“a=a+3”,其他依此类推
比较运算符
-
等于= 大于> 小于< 不等于!= 大于等于>= 小于等于<=
-
“=”为赋值运算符,“==”为比较运算符
逻辑运算符
-
&与 |或 !非 ^异或 &&短路与 ||短路或
实例
/*二元运算符 * A = 1010 0011 * B = 0011 0110 * -- -- -- -- -- * A&B 与 = 0010 0010 * A|B 或 = 1011 0111 * A^B 异或 = 1001 0101 相同为0 不同为1 * ~B 非 = 1100 1001 * 2*8 =16 表示为2*2*2*2 * 位运算效率极高!!! * << 左移 *2 * >> 右移 /2 * */ System.out.println(2<<3);//2*2*2*2 即为左移三位
短路运算:短路与“&&”,若左边为false,则右边的表达式不再进行运算
短路或“||”,若左边为true,则右边的表达式不再进行运算
短路运算实例:
//短路运算 int s = 7; boolean x = (s<6)&&(s++<6);//&&时若(s<6)为false则后续运算不进行则s==7 System.out.println(s);//7 说明并未运算(s++<8) 若运算则s输出为8 System.out.println(x);//false //注意: 短路与&& 短路或|| 均可进行短路运算 但是 与& 或| 不进行短路运算
运算符的优先级
| 优先级 | 运算符 | 结合性 |
|---|---|---|
| 1 | ()、[]、{} | 从左向右 |
| 2 | !、+、-、~、++、-- | 从右向左 |
| 3 | 、/、% | 从左向右 |
| 4 | +、- | 从左向右 |
| 5 | «、»、>>> | 从左向右 |
| 6 | <、<=、>、>=、instanceof | 从左向右 |
| 7 | ==、!= | 从左向右 |
| 8 | & | 从左向右 |
| 9 | ^ | 从左向右 |
| 10 | | | 从左向右 |
| 11 | && | 从左向右 |
| 12 | || | 从左向右 |
| 13 | ?: | 从右向左 |
| 14 | =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= | 从右到左 |
关键字
-
编程语言中(如Java)实现定义好并赋予了特殊含义的单词
-
例如: public(公共的) class(声明类) import(引入包) package(声明包)
注意:
-
所有关键字都是小写
-
不能使用关键字命名标识符
变量及常量
变量数据类型
-
强类型语言 Java
-
类型一:八大基本数据类型
(数值类型)整数类型范围大小:(1)byte<(2)short<(4)int<(8)long int 最常用 long数值尾端加上L : 默认int类型12
(数值类型)浮点类型:用于存储小数数值 (4)float<(8)double float尾端数值加上F 默认double
e/E:1.5E(e)-45表示1.5*10的-45次方 e/E:以10 为底的指数
字符类型:char占两个字节 数值用单引号
布尔型:boolean:占一位,其值只有true和false两个 表示正确错误
-
类型二:五种引用数据类型(不做基础学习)
类(class) 接口(interface) 数组 枚举(enum) 注解(annotation)
模板: 数据类型 变量名 = 值;
常量
上代码
public class Demo01 {
//static静态变量声明
// final常量名称(修饰符,不区分先后) 一般大写字母定义常量
static final double _1 = 1;//定义常量_1
final static int num1 = 1999;//定义一个常量num1
public static void main(String[] args) {
System.out.println(num1);//1999
System.out.println(_1+num1);//2000.0 double类型
}
}
字节
位(bit):计算机内部最小储存单元11001100表示一个八位二进制数
字节(byte):计算机中数据处理的基本单位,单位为B
1B(byte 字节)=8bit(位),即“一字节等于八位”
字符:计算机中使用的数字、字母、符号
1bit表示1位 1byte表示一个字节 1B=8bit 1024B=1KB 1024KB=1M 1024M=1G
作用域
局部变量、实例变量、类变量
public class Demo06 {// 定义类
final static double PI = 3.14;//实例变量:位于主程序方法外类中
//若不进行初始化,则输出为该类型默认值 布尔值为false 0 0.0 除了基本类型,其余默认值均为nall
static float salary =17000; //类变量 位于类里面、下一行为主程序方法:main方法
public static void main(String[] args) {// main方法
String 人生得意须尽欢 = "莫使金樽空对月";//局部变量:位于主程序方法中 使用前先声明 并初始化值(赋一个具体的值)
System.out.println(PI);
System.out.println(salary);
System.out.println(人生得意须尽欢);
}
}
数据类型转换
byte、short、char<int<long<float<long
自动转换
自动转换是Java自动执行的
public static void main(String[] args) {
int i = 1;
byte b = 2;
// byte x = b + i;
// 报错
//int类型和byte类型运算,结果是int类型
int j = b + i;
System.out.println(j);
}
public static void main(String[] args) {
int i = 1;
double d = 2.5;
//int类型和double类型运算,结果是double类型
//int类型会提升为double类型
double e = d+i;
System.out.println(e);
}
强制转换
强制类型转换:将 取值范围大的类型 强制转换成 取值范围小的类型 。 强制转换需要我们自己手动执行。
转换格式:数据类型 变量名 = (数据类型)被转数据值;
public static class void main(string[] args){
int a = 1;
byte b = (byte)a;
//byte优先级小于int 高到低需要进行强制转换
System.out.println(b);
}
内存溢出及精度问题
public static void main(String[] args) {
//类型转换一:内存溢出
int a = 127;
//byte b = a; 错误原因:int容量高于byte,强制转换时先将a转换为byte类型
byte b =(byte)a;
System.out.println(a);
System.out.println(b);//内存溢出
精度问题:当浮点数转换为整数型时会出现小数点后数据丢失
System.out.println((int)11.3F);//输出11:精度问题
System.out.println((int)99.9);//输出99
语句结构
顺序结构*
选择结构
if选择
-
if单选
int _1 = 0;
float _2 = 0.0F;
int _3 = 2;
if (_1==_2){//(语句为true则执行下行代码,为false则跳出选择)
System.out.println(_3);//2
}
if(条件语句){条件语句为true则执行代码块,为假则跳出语句
代码块
}
-
if双选
int _1 = 8;
if (_1%2==0){
System.out.println("这个数为偶数");
}
else{
System.out.println("这个数为奇数");
}//输出为“这个数为偶数”
-
if多选
//评分等级标准A:100~90 B:90~80 C:80~70 D:70~60 不及格:<60 输入错误:t<0&&t>100
int score = 97;
if (score<100&&score>90){//判断条件1
System.out.println("A级");//执行语句1
}else if(score<90&&score>80){//判断条件2
System.out.println("B级");//执行语句2
}else if(score<80&&score>70){
System.out.println("C级");
}else if(score<70&&score>60){
System.out.println("D级");
}else if (score<60){
System.out.println("成绩不合格");
}else{
System.out.println("所输入成绩不合法");
}
Switch选择
-
使用switch关键字描述一个表达式,使用case关键字描述和表达式结果比较的目标值,当表达式的值与某个目标值匹配时则执行对应case下的语句
-
未找到任何匹配值则执行default下的语句,break关键字作用是跳出语句
-
case标签可以为字符串常量或字面量
-
switch中的变量类型可以是byte、int、short、char 字符串String
实例:
public static void main(String[] args) {
int week = 7;
switch (week){//表达式
case 1://目标值1
System.out.println("星期一");//执行语句1
break;
case 2://目标值2
System.out.println("星期二");//执行语句2
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期天");
break;
default:
System.out.println("输入数据有误");
break;
}
}
-
当两个及两个以上的case条件后的执行语句一样则只用书写一次
-
实例如下:
public static void main(String[] args) {
int _1 = 3;//判断输入天数是否为休息日或者工作日
switch (_1){
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("工作日");
break;
case 6:
case 7:
System.out.println("休息日");
break;
}
}
选择结构案例:小明可以买什么
//case穿透性 break、defaul可选
int book = 12;
int pencil = 1;
int rubber = 2;
int cola = 3;
int snacks = 5;
int left = 20-book;
System.out.println("您一共有20元,书本价格为"+book+"元");
System.out.println("1.铅笔的价格为"+pencil+"");//1
System.out.println("2.橡皮的价格为"+rubber+"");//2
System.out.println("3.可乐的价格为"+cola+"");//3
System.out.println("4.零食的价格为"+snacks+"");//4
Scanner str = new Scanner(System.in);
System.out.println("请输入你需要的商品序号:");
int _1 = str.nextInt();
switch (_1){
case 1://购买铅笔 一元一支
Scanner num1 = new Scanner(System.in);
System.out.println("铅笔的价格是"+pencil+"元,买完书后剩余"+left+"元!请选择要购买的数量:");
int _2 = num1.nextInt();
int _3 = 8-_2;
System.out.println("你购买了"+_2+"支铅笔,剩余"+_3+"元");
break;
case 2://购买橡皮 两元一块
Scanner num2 = new Scanner(System.in);
System.out.println("橡皮的价格是"+rubber+"元,买完书后剩余"+left+"元!请输入要购买的数量:");
int _4 = num2.nextInt();//定义用户输入的数据(购买橡皮数量)
int net = 2*_4;//购买橡皮总金额
int net2 = 8-net;
if (net<=8&&net>=0){
System.out.println("你购买了"+_4+"个橡皮,剩余"+net2+"元");
}
else{
System.out.println("你的钱不够了!!!");
}
break;
case 3://购买可乐 三元一瓶
Scanner num3 = new Scanner(System.in);
System.out.println("可乐的价格是"+cola+"元,买完书后剩余"+left+"元!请输入要购买的数量:");
int nat1 = num3.nextInt();//可乐数量
int nat2 = 3*nat1;//总金额
int nat3 = left-nat2;
if (nat1<=2&&nat1>=0){
System.out.println("你购买了"+nat1+"个可乐,剩余"+nat3+"元");
}else{
System.out.println("你的钱不够了!!!");
}
break;
case 4://购买零食 五元一袋
Scanner num4 = new Scanner(System.in);
System.out.println("零食的价格是"+snacks+"元,买完书后剩余"+left+"元!请输入要购买的数量:");
int snk = num4.nextInt();
int snk1 = 5*snk;
int snk2 = left-snk1;
if (snk==0||snk==1){
System.out.println("你购买了"+snk+"份零食,剩余"+snk2+"元");
}else{
System.out.println("你的钱不够了!!!");
}
break;//可选
default://可选
System.out.println("输入数据有误");
break;
}
循环结构
while循环
-
while循环一般用于未知循环次数
//计算1+2+3+4...+99+100?
public static void main(String[] args) {
int a =0;
int plus = 0;
while (a<=100){//循环条件
plus += a;//循环体
a++;
}
System.out.println(plus);//5050
}
-
do.....while循环
-
do...while循环体至少无条件执行一次
public static void main(String[] args) { int a = 0; int b = 0; while (a<0){ a++; } System.out.println(a);//0 System.out.println("=================================="); do { b++; }while (b<0); System.out.println(b);//1 }
-
for循环
-
一般用于已知循环次数
-
格式:
-
for(①初始化表达式;②循环条件;③操作表达式;){ 循环体④; ... }第一步:执行① 第二步:执行②,条件成立则执行第三步(④)。不成立则跳出循环
第三步:执行④ 第四步:执行③,然后重复第二步 第五步:退出循环
public static void main(String[] args) { int b=0; for (int a=0;a<=100;a++){ b+=a; } System.out.println(b); }
嵌套循环
-
定义:指在一个循环语句内再定义一个循环语句的语法结构
while、do...while、for循环都可以在使用时进行嵌套
此处利用两个for循环进行嵌套:
public static void main(String[] args) { //输出 int i, j; //定义两个循环变量 //* for (i = 1; i <= 9; i++) { //外层循环 //** for (j = 1; j <= i; j++) {//内层循环 //*** System.out.print("*");//输出* //**** } //***** System.out.print("\n");//换行 //******* } //******** } //*********//会进行自动换行 println相当于print加上\n的效果
public static void main(String[] args) {//九九乘法表 for (int i=1;i<=9;i++){ for (int j=1;j<=i;j++){ System.out.print(j+"*"+i+"="+"i*j"+"\t"); } System.out.println(); } }
跳转语句(break、continue)
break
-
在switch条件语句以及循环语句中都可以使用break语句
-
switch:break用于种植某个case并且跳楚switch结构
-
循环:用于跳出循环语句,执行循环后代码
public static void main(String[] args) { int i = 0; for (i=0;i<=9;i++){ if (i==7){ break; //i=7跳出循环 } System.out.println(i);//0123456 } System.out.println("============================================="); System.out.println(i);//7 }
continue
-
continue用作循环语句当中,它的作用是终止本次循环
实例(计算100内奇数之和):
//100以内奇数之和
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i<=100;i++){
if (i%2==0){
continue;//跳出本次循环
}else{
sum += i;
}
}
/*for (int i = 1;i<=100;i++){
if (i%2==0){
continue;
}
sum +=i;
}*/
System.out.println(sum);//2500
}
-
扩展:三元运算符
格式: 判断条件 ? 表达式1 : 表达式2
实例:
public class Demo03 {
public static void main(String[] args) {
int salary =7000;
//三元运算符 a ? b : c; 若a为真则输出b,a为假输出b;
String simon = salary<10000 ? "普通" : "小康";//类似if循环语句
System.out.println(simon);//输出“普通”
}
}
代码细节
-
整数类型中long类型须在数值尾部加上字母 L
-
浮点类型中float类型须在数值尾部加上字母 F
-
//数值类型 变量名 = 数值;
-
String(属于类):后数值需加双引号
-
字符类型char:后数值需加单引号
数据类型扩展
-
整数类型
进制:二进制0b 八进制0 十进制 十六进制0x
-
浮点类型拓展
float:离散 有限 舍入误差 约等 接近但不等于(不用于银行进行货币计算)
-
布尔型拓展(boolean)
boolean Simon = true; if (simon==true){ 执行语句1 } //此为初学者 小括号内语句默认为true 因此不用再强调 if (simon){ 执行语句1 } // 此操作熟练后可使用 -
字符拓展(char)
部分特殊字符*:\n换行符 \u数字字符转换









