Java基础知识

概述

什么是java:1.是边编译边解释的面向对象的编程语言。

2.java语言是1995年发布的,发布语言公司是:Sun

3.下载安装Java时从Oracle官网下载,最好下载LTS长期维护版本。Java8,Java11,Java17

4.由于Java虚拟机JVM的存在,可以全平台运行。

5.java之父:james gosling oak

JDK安装

  • JDK--Java Development kit(Java开发工具包)
  • JRE--Java Runtime Environment(Java运行环境)
  • JVM--Java Virtual Machines(Java 虚拟机)
  • java的技术体系结构:安装jdk的时候,主要安装的是java se相关内容。

1.先到oracle官网去下载JDK(https://www.oracle.com/technetwork/java/javase/downloads/index.html)

2.打开环境变量设置

3.JAVA_HOME:jdk的安装路径

4.PATH:JDK的安装包中的bin目录--path配置之后,可以在命令行窗口使用命令

5.测试环境变量的配置:

window+R,然后输入cmd,就可以打开命令行窗口。然后输入java-version命令,查看安装jdk版本

java第一个程序

public class Test {public static void main(String[] args) {System.out.println("HelloJava");}
}

java的变量

  1. 什么是变量:变量是指代在内存中的一块存储空间,用于存储程序运算过程中需要用到的数据。
  2. 变量的定义

变量声明的语法规则:变量类型 变量名字

  • 在变量声明时同时初始化: 变量类型 变量名字 = 初始值
  • 先声明变量,在第一次使用变量之前再对变量赋初值
  • 未经声明的变量不能使用
  • 如果多个变量的类型相同,可以在一条语句中声明,中间用逗号分隔
  • 变量的命名需要符合Java标识符语法要求

    -可以有字母,数字,”_”和”$”符组成

    -首字符不能以数字开头

    -Java是大小写敏感的语言,命名变量时需要注意

    -不能使用Java保留字(Java语言规定好的,有特殊含义的字符:public static void…

  • 中文可以作为变量名字,但是不推荐使用。

    Java变量命名最好能“见名知意” Java编程规范要求:变量的命名需要采用“驼峰命名法”,即:如果Java变量名字由多个

    英语单词组成,除第一个单词首字母小写外,其他的单词,需要首字母大写,其余的字母小写。如(timeMills)

java的关键字

java中基本数据类型

整形int

  • int是最常用的整数类型。一个int类型占用4个字节(32位),

    最大表示范围为:-2147483648 ~ 2147483647

  • 整数类型的直接量(literal)默认是int类型。

  • 两个int整数相除(/),结果取整,舍弃小数部分(非四舍五入),结果还是整数

  • 整数运算要防止溢出

    -整数运算的过程中,运算结果,如果超过了整数能表示的最大范围,会发生溢出。

    正数过大溢出,结果变为负数;负数过小溢出,结果变为正数。

  • 代码

package day2;// int数据类型介绍public class IntDemo {public static void main(String[] args) {// 1. int的数据是占4个字节int  a = 10000 ;System.out.println("a:" + a); // 输出变量a.//int a1 = 10000000000 ;// 100亿 , 编译错误。 超过了int的最大范围。int  b = 1500000000;int  c = 1500000000;int  sum = b + c ;  // 和超过了int的最大值System.out.println("sum:" + sum);// sum:-1294967296 , 这里溢出了。//2 . 直接量int k  = 100 ;// 这里的100就是直接量System.out.println("k十进制:" + k);int k1 = 0x100;System.out.println("k1十六进制:" + k1);int k2 = 0100;System.out.println("k2是8进制:" + k2);// 3. int数据的运算: + , - , * , /(取整) , % (取余)int a1 = 9 ;  // 定义变量int a2 = 4 ;int c1 = a1 + a2 ; // c1 = 13int c2 = a1 - a2; // c2 = 5int c3 = a1 * a2; // c2 = 36int c4 = a1 / a2;// 取整: java程序中规定,两个整数的运算结果只能是整数(9/4 等于2)//   , 数学中(9/4等于2.25)System.out.println("c4:" + c4);int c5 = a1 % a2;// 取余: 获取两个数相除的余数System.out.println("c5:" + c5);// 思考, 怎么判断一个数据是奇数还是偶数if(a1 % 2  == 0){ //a1 % 2 == 0 判断是否相等 , 结果是true或false.System.out.println(a1 + "是偶数");}else{System.out.println(a1 + "是奇数");}// 除法的练习 :计算百分比int  current = 33 ;int  total = 50 ;System.out.println("第一种:");System.out.println( current / total   * 100 + "%");System.out.println("第二种:");System.out.println( current  * 100 / total + "%");}
}

长整型long

  • 如果要表示的整数已经超过了int的范围,那么可以用long类型定义变量,保存数据。

    long类型数据范围(8个字节,64位):

    -9223372036854775808~9223372036854775807

  • long类型直接量的表示,需要在数据后面加一个L或l;

  • 通过long类型来存储系统当前毫秒数,jdk提供了一个方法( System.currentTimeMillis() ),来获 取从1970.1.1日零时至今的毫秒数,

    返回结果为long.

  • 对于较大的整数运算(超出int范围),可以使用long型。

  • 代码

package day2;// long : 长整形 , 8个字节 , 如果int数据范围不够,就选择使用longpublic class LongDemo {public static void main(String[] args) {// 1. 定义long类型的变量long a1 = 100;// java中“直接量”默认为int类型。// long a2 = 10000000000;// 100亿超过了int的范围,所以导致编译错误。long a2 = 10000000000L ; // 在直接量后,添加"L 或 l "的标志,表示这个直接量
是long类型。// 2. 时间毫秒数// 练习: 自己计算一年的毫秒数// long micro = 365 * 24 * 60 * 60 * 1000 ; //全部都是int类型参与运算,结
果就是int类型,超过int范围,就溢出。long micro = 365L * 24 * 60 * 60 * 1000 ; // 把365转为long类型, 所以运
算结果就是long类型。System.out.println("一年的毫秒数:" + micro);// 3. 获取系统的时间毫秒数: 起点为1970.1.1 0:0:0 距离此刻的时间毫秒数long  time = System.currentTimeMillis();System.out.println("距今的时间毫秒:" + time);}
}

double&float

  • 所谓的浮点类型就是小数类型,包含double 和 float。 浮点类型的默认直接量是double类型。 如果要使用float类型,需要在数据后面加F或f。

    double类型的精度比float类型的精度高,因此,一般用double类型。

    eg: float f1 = 3.3F; double money = 3.5;

  • double类型数据运算的时候,会有舍入误差。 由于舍入误差,导致浮点数不能精确运算。

    二进制中无法表示1/10,就像十进制中无法精确表示1/3,所以二进制表示浮点数存在误差

  • 代码

package day2;// double - 双精度浮点型 (8个字节)// float - 单精度浮点型 (4个字节)public class DoubleDemo {public static void main(String[] args) {// 1. 定义变量double  a1 = 3.5 ;//float a2 = 3.5 ;// 编译错误: java中的浮点数直接量默认是double类型。 不能
将double直接赋值给float.float a2 = 3.5F ;// 直接量的好后面,使用“F 或 f” ,让直接量为float类型。// 2. double 用于计算: + , - , * , /   , %double a3 = 1.5 ;System.out.println(a1 + a3); // 5.0System.out.println(a1 - a3); // 2.0System.out.println(a1 * a3); // 5.25System.out.println(a1/a3); // 2.3333333333333335System.out.println(a1%a3); // 0.5
double a4 = 1.4 ;System.out.println(a3 - a4);//0.10000000000000009// 3. 练习: 计算自由落体运动的位移 : s = 1/2 * g * t * t;double g = 9.8 ;int  t = 5 ;double s ;s = 0.5 * g * t * t; // 运算数据有double类型,因此整体的结构时double类型。System.out.println("位移为:" + s ); // 位移为:122.5}
}

char类型

  • 字符类型实质上是一个16位的无符号整数,这是整数对应的字符编码

    Java字符类型采用Unicode字符集编码。Unicode字符编码是国际上通用的定长字符集,所有字符 都是16位。 字符直接量,可以采用字符的形式,比如‘中 ’;

    或者采用Unicode编码的方式,比如:‘\u4e4d’

    字符是整数可以参与运算,比如 char c = ‘A’ ; int a = 10 + c ;//75

  • 字符直接量赋值 整数赋值(0~65535) Unicode编码赋值

    eg: char a = ‘A’; char a = 65; char a = ‘\u0045’;

  • 转义字符(\):对于不方便输出的字符,采用转义字符表示。

  • 代码
// char - 字符   , 本质就是一个整数 , 占两个字节, 且无符号位。public class CharDemo {public static void main(String[] args) {// 1. 定义字符类型的变量char a = 'A';System.out.println(a);// char b = 'AB';// 编译错误: 字符只能是单个// 2. 字符的本质就是整数// 字符和整数的对应关系,一般就称为编码表。// 比如ascii码表 , utf-8编码表, gbk编码表int b = a ; // 这里把a的编码对应的整数,赋值给变量b .System.out.println(b); // 65int c = '中';  // ‘中’对应的编码,赋值给c。System.out.println(c);// 3. 字符的表达方式char  d = '0';char  d1 = 48 ;char  d2 = '\u0048';System.out.println(d  + ":" + d1 + ":" + d2);// 4. 字符的运算char  d3 = '0'; // 编码为48char d4 = '9'; // 编码为57System.out.println(d4 - d3); // 9//5 . 字符范围// char c2 = -5 ; // 编译错误 : 字符都是正整数 , 这里比最小值还小。// char c3 = 1000000; // 编译错误:超过了字符的最大值(65535)int  k = 100000;//char c4 = k ; //编译错误: 只能把整数的直接量赋值给字符 ,不能把int变量赋
值给字符。short k1 = 300;// char c5 = k1;// 6. 转义字符: 程序中的特殊字符,如果要输出,可以选择使用 "\ + 字符"方式, 然后输出这个内容。System.out.println("孔子说:\"学而时习之。\"");System.out.println("3\t+\t5\t=\t8");}
}

bmi指数计算

import java.util.Scanner;// BMI的公式=体重(kg)/身高(m) * 身高(m) , 先算身高的平方,然后再算除法 。public class BMIDemo {public static void main(String[] args) {// 要求 : 让用户输入姓名, 体重   , 身高 , 然后根据用户输入的数据,计算bmi指数 , 然后输出bmi指数Scanner scanner = new Scanner(System.in);double  bmi , h , w ;System.out.println("请输入你的姓名:");String  name = scanner.next() ;  // 输入字符串System.out.println("请输入身高(m):");h = scanner.nextDouble() ;// nextDouble: 用于输入double类型数据System.out.println("请输入体重(kg):");w = scanner.nextDouble() ; //// 计算bmibmi =  w / (h * h);System.out.println(name + ",你的bmi:" + bmi);}
}

随机字符

//产生 A~Z的随机字符// 练习: 0~9随机整数// 练习: a~z的随机字符public class AZDemo {public static void main(String[] args) {// 1. 产生随机数double random = Math.random();  // Math.random() 产生一个随机数 , [0,1)区间
的浮点数double data = random * 26 ;int  a  = (int) data ; // java的强制数据类型转换System.out.println("0~26:" + a);// 2. 得到随机字符char c = (char)(a  +  65);// java的强制数据类型转换System.out.println("随机字符:" + c);}
}

boolean类型

  • boolean类型,即布尔类型,适用于逻辑运算,一般在程序流程控制中作为条件判断。
  • boolean类型的值只有两个:true/false。不能用0或非0代替true/false.
  • boolean类型不能与整数类型做转换。
  • 代码
// boolean - 布尔 , true(真) , false(假)public class BooleanDemo {public static void main(String[] args) {// 1.定义变量// java中规定 boolean类只有两个值: true , false .boolean  a  = true ; // true 就是一个直接量。boolean  b = false ;// false就是一个直接量。// boolean c = 1;// 编译错误: 1不是boolean类型,不能赋值给变量c.// 2. 运算: 逻辑运算// && 与运算 , || 或运算 , !非运算boolean c = a && b ;// c = falsec =  a || b ;// c = truec = !a ;// c = false// 3. boolean类型主要用于条件判断int  age = 19 ;boolean  d =  age > 18 ; // age > 18 结果是true. 所有 d = true.if(d){ // if...else 就是在判断boolean的数据值 ,如果为真,就输出成年人,如果
为假,输出未成年System.out.println("成年人.");}else{System.out.println("未成年.");}}
}

数据类型转换

  • 自动数据类型转换(隐式转换):小类型,自动转为大类型。

  • 强制数据类型转换:从大类型,转到小类型,需要强制转化,可能会有精度损失或者溢出。
import javax.swing.text.StyledEditorKit;// -- 数据类型转换//   自动类型转换//   强制数据类型转换public class DataTypeDemo {public static void main(String[] args) {// 1. 自动类型转换long  a1 = 100 ; // 自动类型转换: 直接量100是int类型 , a1是long类型。 说
明这里就自动类型转换。// 2. 强制数据类型转换。//int a2 = 3.6 ; // 编译错误:   3.6是double类型 , a2是int , 不能直接转
换。int a2 = (int) 3.6 ;// 强制数据类型转换 : 在数据3.6的前面添加(int),告诉程
序,把这个3.6转换为int.System.out.println("a1:" + a1); // 100System.out.println("a2:" + a2); // 3// 3.强转造成精度损失或者溢出double d = 3.141592666666666 ;float d1 = (float)d;System.out.println("精度损失:" + d1); // 3.1415927long data = 10000000000L;int  data1 = (int)data;System.out.println("溢出:" + data1);// 1410065408// 4. byte , short两种数据byte b1 = 100; // 自动类型转换//byte b2 = 200; // 编译错误:超过byte的范围了。short  s1 = 100;// short s2 = 100000000; // 编译错误: 超过了short的范围了。byte b2 = 5 ;// byte b3 =b1 + b2; // 编译错误:数据类型不匹配 。java中的运算byte 和
short ,都会转换为int的结果。byte b3 =(byte)(b1 + b2) ; // 表示把运算结果,进行强制转换。System.out.println("b3:" + b3);// 5.面试题short aa1 = 5;short aa2 = 5;//short aa3 = aa1+aa2; 编译错误:short参与运算的时候,转换为int, 运算的结
果就是int. int类型不能直接赋值给short.short aa3 =(short)(aa1+aa2);short aa4 = 5 + 5; // 这里可以,是因为,编译的时候 ,这里的5+5是直接量的运
算, 已经计算出结果为10 , 10可以赋值给short类型。// 一天的毫秒数long time = 24*60*60*1000 ;// 这里全都是直接量 , 所以编译器会将结果算出来,
赋值给time.// 6. 练习:// a. 定义一个long类型的变量,然后赋值给double类型的变量long  l1 = 10;double l2 = l1; // 自动类型转换// b. 定义一个char类型的变量,然后赋值给short类型char l3 = ' ';short l4 = (short)l3; // 强制数据类型转换// c. 定义一个float类型的变量,然后赋值给int类型float l5 = 3.5F;int  l6 = (int)l5;// d. 定义一个boolean类型的变量,然后赋值给byte类型。boolean l7 = true;// byte l8 = l7;// 编译错误: boolean不能转换为整数}
}

运算符

算术运算符

  • Java中的算数运算符,包含:+(加),-(减),*(乘),/(除),%(取余),++(自增),--(自 减)。

    ++(自增),--(自减)运算是在自身值的基础上,增加或者减少1. ++,--写在变量的前面,运算的时候,需要先增加或者减少1,再参与运算。

    ++,--写在变量的后面,运算的时候,需要先参与运算,再增加或者减少1。

  • “+”,“-”,可以作为数据正负符号。
  • 代码
// 算术运算符:   + , - , * , / , %
//             ++ , --
//             符号(+ , -)// 能做算术运算的类型:   byte ,short ,int , long , char , float , double
// 不能做算术运算的类型: boolean , 其它复杂类型public class SuanShuDemo {public static void main(String[] args) {// 1. 加法(减法 , 乘法)运算long  data1 = 10 ;double data2 = 3.5;double data3 = data1 + data2; // 运算结果以大范围数据为准。System.out.println("data3:" + data3);// 2.   除法(/) 运算double data4 = data1/3 * data2 ; // 运算结果以大范围数据为准。System.out.println("data4:" + data4); // 10.5data4 = 1/2 ; // 0.0 : 这里1、2都是int类型,所以运算结果是0. 但是把int的数
据赋值给double类型,所以最终值是0.0System.out.println("data4:" + data4);data4 = 1/2.0;  // 0.5System.out.println("data4:" + data4);// 3 . 取余(% )运算long m = data1 % 3 ; // 如果m是0,表示能整除, 如果m不是0,表示不能整除。boolean  k =  m ==0; // m ==0 ,表示判断m是否为0,是结果为true , 不是结果为false.System.out.println("k:" + k);// k:false// 4. ++(--) 运算: 在原来的数据上增加1, 或者减少1.int i= 5 ;i ++ ;  // 自增: i = i + 1;System.out.println("i:" + i); // 6i--; // 自减: i = i - 1 ; System.out.println("i:" + i); // 5/*
int j = ++ i ; // 前自增: 先对i进行增加,然后把增加之后的数据值,赋值给变量j.System.out.println("i:" + i +", j=" + j); // i=6, j=6*/int j = i ++ ; // 后自增 : 先把i的数据值,赋值给变量j , 然后再对i增加1.System.out.println("i:" + i +", j=" + j); // i=6 , j = 5int i1 =  i++  + j++   + i-- ; // i = 6, j = 6 , i1System.out.println("i1:" +i1);// i1=18// 5. 符号(+ , -)int m1 = -5; // 负号int m2  = + 5; // 正号int m3 =  -5 - 5;System.out.println("m3:" + m3);int m4 = -5 + -10;System.out.println("m4:" + m4);int m5 = -5 + +10;System.out.println("m5:" + m5);}
}

关系运算符

  • Java中的关系运算符,包含:>(大于),(小于),==(等于),>=(大于等于), (小余等于),!=(不等于)。
  • 关系运算的结果为boolean类型。
  • 代码
    // 关系运算://       大于(>), 大于等于(>=), 等于(==),不等于(!=), 小于(<),小于等于(<=)
    //       能进行关系运算: byte , short ,int , long , char , float , double
    //       不能进行关系运算: boolean , 其它的引用类型public class GuanXiDemo {public static void main(String[] args) {// 1. 关系运算的结果是boolean 类型int a = 100;int b = 200;boolean r = a > b ; // 关系运算, r 是 false.char  c = '中';char  c1 ='国';if(c > c1){ // c > c1 : 如果满足条件, 那么就是true , 否则就是false.System.out.println("中的编码值大于国的编码值");}else{System.out.println("中的编码值小于国的编码值");}// 2. 等于(==)int  a1 = 10 ;int  a2 = 20 ;//int a3 = a1==a2; // 编译错误: a1==a2是条件运算,结果是boolean类型, 不能赋值给int类型。int  a3 = a2 = a1;// “=”是赋值运算。System.out.println("a1:" + a1 + ",a2:" + a2+",a3:" + a3);// 3 ,练习: 定义两个整数,找到两个整数中最大的那个a1 = 30 ;a2 = 50 ;boolean  b1  = a1 >= a2; // 赋值运算符的优先级最低 , 先做其它运算,最后赋
    值。if(b1) {System.out.println("a1大:" + a1);}else{System.out.println("a2大:" + a2);}}
    }

    逻辑运算符

  • && “与”运算
  • || “或”运算
  • !“非”运算
  • 逻辑运算的结果为boolean类型
  • 代码
    //   逻辑运算:   && -与 , || 或   , ! 非//         运算规则: 与运算(全为真则结果为真,有假则结果为假。)//                 或运算(全为假则结果为假,有真则结果为真。)//                 非运算( 真变假,假变为真,本质就是取反。)
    //       逻辑运算的结果是boolean值//       能做逻辑运算类型: boolean
    //       不能做逻辑运算的类型: 除了boolean类型,都不能做逻辑运算。// 短路逻辑: && , || , 指当我们能够判断出运算结果的时候,后续的表达式不再执行。 —— 常用短路逻辑。// 不短路逻辑: & , | , 每个参与运算的表达式都需要执行。 —— 不常用public class LuoJiDemo {public static void main(String[] args) {// 1. 运算boolean b1 = true;boolean b2 = true;boolean b3 = false;boolean b4 = b1 && b2 ;// trueb4  = b1 && b2 && b3 ;// falseb4 = b1 || b3; // trueb4 = b1 || b2 || b3; // trueb4 = !b3; // trueb4 = !(b1||b2); // false
    b4 = !(b1 && b3) || b3 ; // true// 2. 短路逻辑与, 短路逻辑或int  a = 3, b = 5 ;/*boolean b5 = a > b && a++ > 1 ; // a>b 是false , 那么&& 运算的结果确
    定出来是false. 这里用的是 “短路&&” , 所以后面// a++ >1的表达式不会被执行到。 因此最终 a 还是 3.System.out.println("a:" + a); // a是3 。boolean b5 = a > b & a++ > 1; // "&"不短路与, 整个运算的所有表达式都要
    执行。System.out.println("a :" + a); // a 是 4boolean b6 = a < b || a++>0;// a<b 结果是true ,“短路||运算”   ,   后
    面的a++>0不会判断。System.out.println("a:" + a); // a 是 3*/boolean  b6 = a > b || a++>0; // a >b 结果是false . 或运算的结果不定 , 因此判断 a++ >0的情况。System.out.println("a:" + a); // a 是 4}
    }
    

    赋值运算符和扩展赋值运算符

  • 赋值运算符“=”是最常用的赋值运算。它将“=”右边的运算结果的值,赋给“=”左边的变量。
  • 赋值运算符的优先级很低。(低于算数运算符)
  • 在赋值运算符的前面,加入算数运算符,即为扩展赋值运算符。

    +=,-=,*=,/=,%=

字符串拼接“+”

  • 运算符“+”,用于数据类型,加法运算。
  • 运算符“+”,用于字符串型,字符串拼接运算。
  • 字符串(String)+ 数据,java中会自动将数据转为字符串,然后两个字符串相连,生成一个新的 字符串。

三目运算符

  • 三目运算符格式: X ? Y : Z; --boolean表达式?表达式1 : 表达式2;
  • X为boolean表达式,如果X为true,在运算结果为Y的值,

    如果X为false,则运算结果为Z的值。

扩展赋值运算和三目运算和字符串拼接代码:

// 1. = , 赋值运算// 2. += , -= , *= . /= , %= 扩展的赋值运算符 :   表示变量的数据取出来和其它数据进行运
算,然后把运算结果赋值给变量。// 3. "+" 用于字符串拼接。// 4. 三目运算: ?: , 语法规则:   boolean ? 表达式1 : 表达式2. , boolean值为true ,
执行 表达式1 , 否则执行表达式2.public class OtherYunSuanDemo {public static void main(String[] args) {// 1. 扩展的赋值运算符号int k = 10 ;k += 20 ;// k=?   , 这里的 k += 20 完全等价于 k = k + 20 . 所有 k = 30 .System.out.println("k:" + k );k /= 4 ; // k =? , k = k/4 所以k= 7System.out.println("k:" + k );// 2. "+" 做字符串拼接String str = "hello";System.out.println( k + k + str); // "14hello"System.out.println(k + str  + k); //7hello7System.out.println(str + k + k); // hello77System.out.println(str + (k+k)); //hello14System.out.println((str+k) + k + k); // hello777System.out.println(str + k + k ); // hello77System.out.println(k+k+k+k);//28// 3. 三目运算int age = 19 ;String  info = age >= 18 ? "成年人" : "未成年人";  // 需要把三目运算的就结果,
赋值给一个变量,保存起来。System.out.println("你现在:" + age  + "岁,你是:" + info);}
}

三目运算找最大值

import java.util.Scanner;// 用三目运算,判断出用户输入的两个数据中最大的那个。public class MaxData {public static void main(String[] args) {// boolean ? 表达式1 : 表达式2Scanner sc = new Scanner(System.in);System.out.println("请输入一个数据:");int data1 = sc.nextInt();System.out.println("请在输入一个数据:");int data2 = sc.nextInt();int max = data1 < data2 ? data2: data1;System.out.println("两个数据中较大的是:" + max) ;}
}

程序的结构

任何复杂的程序结构都是由“顺序结构”,“分支结构”,“循环结构”。

分支结构

  • Java语法中的分支结构包含以下四种
  • 分支结构可以嵌套使用
  • 1.if //如果…
  • 2.if……else…… //如果…否则…
  • 3.if…….else if……. //如果…否则 如果…..
  • 4.switch……case…… //switch….情况1…情况2…..

if...else代码:

public class IfElseManyDemo1 {public static void main(String[] args) {Scanner sc =new Scanner(System.in);System.out.println("请输入1~7的数据:");int num = sc.nextInt();if(num <0  || num  > 7){System.out.println("输入的数据不合理,请重新输入。");}else{if(num == 1){System.out.println("星期一");}else  if(num == 2){System.out.println("星期二");}else if(num == 3){System.out.println("星期三");}else if(num == 4){System.out.println("星期四");}else  if(num == 5){System.out.println("星期五");}else if(num == 6){System.out.println("星期六");}else{
System.out.println("周日");}}}
}

switch代码:

import java.util.Scanner;// switch ... case的语法规则// switch(变量) {
//     case 数值1: ....
//     case 数值2: ....
//     default: ......
// }public class SwitchDemo {public static void main(String[] args) {Scanner sc =new Scanner(System.in);System.out.println("请输入数据值1~7:");int week = sc.nextInt();switch (week){case  1:System.out.println("星期一");break;  // break,中断, java中的关键字, 这里表示执行完case之后,
整个switch语句块结束。case  2:System.out.println("星期二");//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("数据不合理,请重新输入。");}}
}

循环结构

for循环

  • 循环是程序设计语言中反复执行某些代码的一种计算机处理过程,是一组相同或相似的语句被有规 律地执行。 循环三要素

    1.循环变量初始化

    2.循环条件(以循环变量为判断条件)

    3.循环变量的改变(向着循环结束变)

  • for循环是最经典的循环语法,也是使用最多的循环方式。

    for语法规则:

    for(表达式1;表达式2;表达式3){ // 语句序列 } 表达式1:初始化表达式,负责完成循环条件的初始化

    表达式2:循环条件表达式,值为boolean的表达式,指定循环条件

    表达式3:循环后的操作表达式,负责修改变量,改变循环条件

  • for循环代码执行流程

累加代码

//计算1+2+3......+100的和
public class SumDemo {public static void main(String[] args) {int sum = 0 ;// 保存和 , 0不影响加法运算的结果。for(int i=1 ; i <=100 ; i ++){sum = sum +i ;// 每一次重复做的事情。}System.out.println("1+...100:" + sum);// 练习: 计算1+1/2+1/3......+1/888的和;double sum1 = 0 ;for(int i = 1 ; i <=888 ; i ++){sum1 =   sum1 +  1.0/i;}System.out.println("sum1:" + sum1);}
}

for循环的特殊写法

for(;表达式2;表达式3)for(;表达式2;)for(;;)for(int a = 0, b=5 ; a<b; a++,b--) {System.out.println(a+",,,"+b);}

while循环

  • while语法规则:

    语句0 ;

    while(循环条件){ 语句1 ;//循环体

    } 语句2 ;

  • 代码
// while循环的语法规则
// while(boolean){
//   语句块// }public class WhileDemo {public static void main(String[] args) {// 1. 输出 1*9=9 到 9*9=91int num = 1;  // 循环的初始变量while(num <=9){ // 循环的条件System.out.println(num + " * 9 = " + (num * 9 )); // 循环执行的语句
块num ++ ;   //循环的初始变量的变化}// 2. 练习, 输出你的名字20次。num = 1 ;while(num < 21){System.out.println("tom");num ++ ;}// 练习: 输出1~100中能被3整除的数据。num = 1;while(num <=100){if(num % 3 == 0){System.out.println(num);}num++;}}
}

猜数字

import java.util.Scanner;// 猜数字: 随机产生一个整数, 让用户输入一个数据,然后对比大小,直到用户猜正确public class GuessData {public static void main(String[] args) {// 1. 产生一个随机整数[0,100)int data = (int)(Math.random()*100);System.out.println("data:" + data);// 2. 输入数据的功能Scanner sc = new Scanner(System.in);// 3. 循环让用户输入数据,然后对比大小,直到用户输入正确while(true){ // while的条件为true的时候, 表示这个while循环会一直执行。一般称这种
情况为”死循环“// 我们可以循环代码块中,做条件判断, 符合某种条件的时候 ,就利用break, 结束循环。System.out.println("请输入一个整数[0,100):");int input = sc.nextInt();if(input > data){System.out.println("太大了, 小一点。");}else if(input < data){System.out.println("太小了, 大一点");}else{System.out.println("恭喜你,猜对了。");break; // 结束循环}}}
}

循环相关

do...while

  • do…while语法规则:

    语句0 ; do{ 语句1;//循环体

    语句2;// }while (循环条件); 语句3 ;

  • 对比while循环

    while循环先判断,再执行;

    do…while先执行一次,再判断,至少要执行一次。

    While循环比do…while循环用得多。

  • 代码

    import java.util.Scanner;// do { 语句 } while(条件);   , 特点是:循环体至少执行一次。public class DoWhileDemo {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);/*int num ;do{System.out.println("请输入一个数据");num = scanner.nextInt();}while (num != 30 );*/// 练习: 输入密码(123456)解锁手机, 只能输入5次,超过5次了就提示用户过半个小
    时在尝试。int count = 1 ; // 记录次数int pwd ;do{if(count == 6){System.out.println("你的输入次数用完了,请半个小时之后,在尝试。");//break; 结束循环return;  // 结束整个程序的运行}System.out.println("请输入密码:");pwd = scanner.nextInt();count ++ ;// 改变输入的次数}while (pwd != 123456);System.out.println("手机解锁成功了。");}
    }

    死循环

  • 循环没有指明结束条件的情况会造成死循环

break&continue

  • break可用于循环语句或switch语句。

    break用于循环,可使程序终止循环从而执行循环后面的语句。常常与条件语句一起使用。

  • continue 用于循环语句中,表示跳过循环体剩余语句,继续执行下一次循环。

    continue 只能在循环语句中使用。

  • 代码

    import java.util.Scanner;// 随机出10道题, 记录用户的考试分数,每题10分.public class TestDemo {public static void main(String[] args){int score = 0; // 用于记录分数Scanner sc = new Scanner(System.in);for(int i= 1;i <=10 ;i ++){int a  = (int)(Math.random() * 10);// 强制转换int b  = (int)(Math.random() * 10);System.out.println("题目:" + a   + " + " + b  + "=");System.out.println("请输入你的答案:");int answer = sc.nextInt() ;if(answer == -1){ // 表示用户跳过这题continue; // java中的关键字, 用于跳过本次循环, 继续下一次循环。}else if(answer == -2){break; // 结束for循环}else {if(answer == a+b){score += 10 ;  // 记录分数}}}// for循环结束,表示考试结束了,显示最终得分System.out.println("最后得分:" + score);
    }
    }

    循环的嵌套

  • 循环的内部,再有其它循环,就是循环的嵌套。
  • 外层走一次,内层走所有次
  • 建议循环层数越少越好
  • 代码
  • // 循环的嵌套: 循环的内部,还包含一个循环。//     *** 外层循环执行一次, 内层循环执行所有次。 (内部循环执行结束了,再次执行到外层
    循环的下一次。)public class JiuJiuDemo {public static void main(String[] args) {for(int i = 1; i <=9 ; i ++){  // 外层循环for(int j = 1;  j <= i; j++){ // j<=i ,可以设置内层循环的次数。System.out.print( i + "+" + j  + "=" + (i+j) + "\t"); // \t转
    移字符, tab键的宽度}System.out.println(); // 输出一个回车换行}}
    }

    数组

什么是数组

  • 数组:相同数据类型的元素组成的集合
  • 元素按线性顺序排列。所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素; 除最 后一个元素外,每一个元素都有唯一的后继元素(“一个跟一个”),可以通过元素所在位置的顺序号 (下标)做标识来访问每一个元素(下标从0开始,最大到元素的个数-1)

数组的使用

  • 声明数组的语法: 数据类型[] 数组名 = new 数据类型[大小];

  • 数组声明后的默认值

    ------数组new之后,每个元素都有默认值。int,long默认值为0,double默认值为0.0,boolean

    默认值为false,char默认值为空字符。

  • 代码

  • // array - 数组// 当我们有一组数据需要保存在一个变量中的时候,一般可以声明一个对应长度和对应数据类型的数
    组, 然后把这组数据存储在数组中。public class ArrayDemo {public static void main(String[] args) {// 1. 定义一个数组//int a = 1,b=10,c=20,d=30,e=50; // 定义了五个变量,存储了五个数据。int[] arr ; // arr是数组类型//arr = new int[]; // 编译错误: java规定创建数组对象的时候,必须指定数组的长
    度。arr = new int[6]; // 内存空间会分配存储长度为6个整形数据空间。// 2. 数组的初始化int[] arr1 = new int[5]; // arr1的长度是5. 这里的每个元素都是int类型的默认
    值:0.char[] arr2 = {'A','B','A',10} ; // arr2的长度是 4 ,每个位置的元素已经指
    定了。double[] arr3 = new double[]{1.5,2.5,3.5,4.5}; //arr3的长度 4 , 每个位
    置都有具体的数据。// 3. 通过数组的下标(从0开始,到元素个数-1结束)访问到数据中的元素。/*System.out.println(arr1[0]); // arr1[下标]System.out.println(arr1[1]);System.out.println(arr1[2]);System.out.println(arr1[3]);System.out.println(arr1[4]); // 数组长度是5, 下标值: 0,1,2,3,4 , 其
    它数据,则发生异常。*/for(int i=0 ;i < 5 ; i++){System.out.println(arr1[i]); // arr1[i] , i 从0 逐渐变化到4. 正好就
    是数组的每一个元素。}
    }
    }

    数组交换位置

public class ArrayDemo2 {public static void main(String[] args) {// 1. 创建整形数组int[] arr = new int[]{10,15,8,40,25,5};// 2. 把数组中最大的数据值移动到最末位。for(int i=0 ; i <= arr.length -2 ; i ++){if(arr[i] < arr[i+1]){ // 当前元素 小于 下一个元素, 不交换位置, 反之
交换位置continue; // 跳出本次循环}else{int temp = arr[i];arr[i] = arr[i+1];arr[i+1] = temp;}}// 3. 遍历输出数组的元素for(int i = 0 ; i < arr.length ; i ++ ){System.out.println(arr[i]);}// 4. 练习:把最小值移动末尾for(int i =0 ; i < arr.length -1 ; i++){if(arr[i] < arr[i+1]){// 当前元素,小于下一个元素,说明需要交换位置。int temp = arr[i];arr[i] = arr[i+1];arr[i+1] = temp ;}}// 5. 遍历输出数组的元素System.out.println("最末尾是最小的:");for(int i = 0 ; i < arr.length ; i ++ ){ // 假设: i <= arr.length// i = 0,1,2,3,4,5,6 , 下
标只能是0,1,2,3,4,5 ,// i=6 数据数据arr[6] , 找
不到 , 程序处理不了, 就抛异常System.out.print(arr[i] + "\t");}/*Exception : 异常ArrayIndexOutOfBoundsException : array 数组 , index 索引 , out of
bounds 超出边界Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:
6at day5.ArrayDemo2.main(ArrayDemo2.java:33) // 类中的第33行。*/}
}

数组的排序

  • 冒泡排序:所谓的冒泡算法就是从左往右依次比较两个数大小,若前一个数大于后一个数,则两个数 交换位置
  • 升序
// bubble: 泡// 冒泡排序: 双重for循环, 外层for循环走一次,内层循环周n次, 就能把数组中的一个元素的位
置排好 。public class BubbleDemo {public static void main(String[] args) {int[] arr = new int[]{10,15,8,40,25,5};// 1. 升序排序for(int i= 0 ; i < arr.length - 1 ; i++ ){for(int k = 0 ; k < arr.length - 1 ; k++){ // k = 0 , 1,2, 3,4 , k+1 = 1,2,3,4,5if(arr[k] < arr[k+1]){continue;}else{ // 下一个小,就交换位置int temp = arr[k];arr[k] = arr[k+1];arr[k+1] = temp ;}}}// 2. 输出升序数组for(int i= 0 ; i < arr.length ; i++){System.out.print(arr[i] + "\t");}}
}
  • 降序
// bubble: 泡// 冒泡排序: 双重for循环, 外层for循环走一次,内层循环周n次, 就能把数组中的一个元素的位
置排好 。public class BubbleDemo1 {public static void main(String[] args) {int[] arr = new int[]{10,15,8,40,25,5};// 1. 降序排序for(int i= 0 ; i < arr.length - 1 ; i++ ){for(int k = 0 ; k < arr.length - 1 ; k++){   // k = 0 , 1,2,
3,4 , k+1 = 1,2,3,4,5if(arr[k] < arr[k+1]){int temp = arr[k];arr[k] = arr[k+1];arr[k+1] = temp ;}}}// 2. 输出降序数组for(int i= 0 ; i < arr.length ; i++){System.out.print(arr[i] + "\t");}}
}
  • 数组排序函数sort

    Arrays.sort()——jdk提供的排序方法。

String[] names ={"tom","cat","jerry"};Arrays.sort(names);System.out.println( Arrays.toString(names) );    // import
java.util.Arrays;
  • 数组复制

    JDK提供对数组进行复制的方法,即将一个数组(源数组)中的各个元素值复制到另一个数组(目 标数组)中:

  • 数组扩容

数组的长度在创建后不可以改变的。所谓“扩展”是指创建一个更大新数组,并将原有数组的内容复 制到其中。Jdk提供了一个方法,Arrays.copyOf 可以实现数组的“扩容”

个人总结

if(条件){

}else{

if(条件){

}else if(条件){

}

int input =sc.nextInt();

switch(input){

case 1:

}

int sum =0;

for(int i= 0;i<=20;i++){

sum +=i;

}

while(条件){

}

break;//结束当前循环

return;//结束整个程序

JAVA技术解析

一,运行原理

高级语言运行过程 
在程序真正运行在CPU上之前,必须要让OS的kernel理解我们在编辑器或者IDE里根据每种语言的语法规则敲入的源代码,kernel才能做出相关的调度,所以需要先将源代码转化成可执行的二进制文件,这个过程通常由编译器完成。有些编译器直接将源代码编译成机器码,载入内存后CPU可以直接运行。而机器码的格式与跟具体的CPU架构相关连,例如ARM CPU无法理解Intel CPU机器码。因此,同样的源代码需要根据不同的硬件进行特定的编译。高级语言转换到低级语言的桥梁就是编译器。程序员写好源代码,编译器将源码编译成可执行的机码,然后CPU读取机器码,执行程序。

面试题解析

1、在JAVA中,如何跳出当前多重嵌套循环?

在Java中的跳转语句有两种break语句(结束当前循环)和continue语句(结束当次循环),跳出多重循环可以使用break。
2、JDK和JRE有什么区别?

JRE是java运行时环境,而JDK是java开发工具包,JDK包含JRE,但是JRE可以独立安装
3、=、==、和equls的区别

“=”是赋值;“==”是等于;“equals”可以作为输出语句
4、string是基础数据类型吗?基础的数据类型有哪些?

是基础数据类型,int,long,float,boolean,double,char
5、如何实现数组和List之间的转换?

使用 Arrays. asList(array) 进行转换。
List 转数组:使用 List 自带的 toArray() 方法。

public void arraysToList(){/*** List转Array*/List<String> arrayList = new ArrayList<>();arrayList.add("a");//使用toArray之后,转换的是Object数组Object[] objects = arrayList.toArray();System.out.println(Arrays.toString(objects));/*** Array转List*/String[] str = {"a", "b", "c"};List<String> list = Arrays.asList(str);System.out.println(list.toString());}

华清远见-重庆中心-JAVA基础阶段技术总结/知识点梳理/个人总结/关于JAVA技术的解析(看法)/面试题解析相关推荐

  1. 华清远见重庆中心—后端基础阶段技术总结/个人总结

    后端基础阶段技术总结 JAVA概述 1.java的历史 Oak(橡树)语言,由Green开发团队开发,主要用于微型嵌入式设备编程,第一次提出了开源协议 . Java之父 詹姆斯.高斯林 经历过Sun公 ...

  2. 华清远见重庆中心--后端基础阶段技术总结/个人总结

    目录 目录 目录 Java基础知识 java概述 JDK安装 JDK卸载 JDK版本切换 认识JetBrains 安装IDEA IDEA环境的认识 新建一个Java的项目 新建一个文件 第一个Java ...

  3. 华清远见-重庆中心-JavaWeb后端阶段技术总结

    华清远见-重庆中心-JavaWeb后端阶段技术总结 JavaWeb 使用Java开发Web服务的技术,统称为JavaWeb. B/S与C/S模式 B/S:Browser/Server 浏览器/服务器模 ...

  4. 华清远见-重庆中心-JavaWeb综合阶段技术总结

    JavaWeb 使用Java开发Web服务的技术,统称为JavaWeb. B/S与C/S模式 B/S:Browser/Server 浏览器/服务器模式 用户只需要一个浏览器即可访问服务器 C/S:Cl ...

  5. 华清远见-重庆中心-javaweb后端阶段知识点梳理

    JavaWeb 使用Java开发Web服务的技术,统称为JavaWeb. B/S与C/S模式 B/S:Browser/Server 浏览器/服务器模式 用户只需要一个浏览器即可访问服务器 C/S:Cl ...

  6. 华清远见-重庆中心-VSS前端阶段知识点梳理

    VSS 前端开发 1.html 1.1什么是html? Hyper Text Markup Language 超文本标记语言 超文本:有视频.音频.图片等,超越文本 标记语言:有一套标签 2.网页的基 ...

  7. 华清远见-重庆中心-JAVA基础阶段技术总结

    系列文章目录 第一章 华清远见--重庆中心-JAVA基础阶段技术总结 第二章 文章目录 系列文章目录 文章目录 前言 一.关于java 1.发展历程 2.编程开发 3.java架构 4.java的特点 ...

  8. 华清远见—重庆中心——JAVA高级阶段知识点梳理

    华清远见-重庆中心--JAVA高级阶段知识点梳理 String字符串 String是一个类,属于数据类型中的引用类型.Java中所有使用""引起来的内容都是属于这个类的实例,称为字 ...

  9. 华清远见-重庆中心-JAVA面向对象阶段技术总结

    华清远见-重庆中心-JAVA面向对象阶段技术总结 面向对象和面向过程的编程思想 面向对象(OOP) 通过创建(new)对象,赋予对象对应的行为和特征,让这些对象相互配合来解决问题 面向过程(POP) ...

  10. 华清远见-重庆中心-框架阶段技术总结/知识点梳理

    文章目录 华清远见-重庆中心-框架阶段技术总结/知识点梳理/个人总结 框架 Java主流框架 Spring 概念 组成 名词解释 IOC DI Spring控制台应用 1.创建一个普通的Maven项目 ...

最新文章

  1. java多递归调用_java – 递归调用方法
  2. ios开发判断字符串为空_【开发常识】这个问题,直接导致年终奖没了……(惨兮兮)...
  3. 面试系列 | 带你彻底搞懂 Python 装饰器
  4. bzoj4543. [POI2014]Hotel加强版
  5. 贪心算法|Greedy Algorithms(背包问题)
  6. Node.js 与 JavaScript 基金会正式合并,JS 喜提新主场
  7. 三分钟零代码实现CAD网页Web快速看图和高科技效果展示
  8. IB驱动包下载 : Ubuntu 16.04 的 IB驱动 iso、source包、tgz包
  9. sqlldr 参数介绍
  10. Google版 “AirDrop” 姗姗来迟,万能联播缘何超越Nearby Sharing?
  11. c语言父进程创建孙进程,进程的创建与并发的执行-带答案版.doc
  12. win7出winsock问题了!~~~~~
  13. 通过设置Weblogic设置线程数提高系统并发
  14. arduino 电子时钟
  15. 1*1卷积核的作用(bottleneck的作用)
  16. Java程序员如何不断提高自己的专业技能
  17. 安霸flash dma操作
  18. DNS抗压集群服务器部署、远程加密更新DNS、花生壳(DDNS)--动态域名解析功能实现
  19. 痞子衡嵌入式:MCUXpresso IDE下工程链接文件配置管理与自动生成机制
  20. USB 3.0规范中译本 附录

热门文章

  1. STM32CubeMX实现串口DMA中断通信
  2. 自动化测试 | 这些常用测试平台,你们公司在用的是哪些呢?
  3. 基于C#实现的小型动物识别推理系统
  4. 深度系统deepin
  5. 名爵5显示服务器异常,名爵5危险警告灯异常闪烁
  6. java在线api中文_JAVA中英文API(在线版)
  7. Oracle设计题资料分析题
  8. Games101-课程16笔记
  9. python获取文件夹下指定后缀名文件列表(可手工设定是否遍历子文件夹)cmd复制文件命令使用
  10. 广东省计算机一级网络题教学,2017年广东计算机一级考试试题