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

Java基础知识总结
摘要由CSDN通过智能技术生成

概述

  • 1995 Java问世,1996 JDK 1.02009 Oracle以超过70亿美元交易总值收购了Sun
  • java之父:James Gosling Oak
  • Java特点:简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。

Java的分类

  • JavaME(Java2 Micro Edition,Java2平台的微型版),主要应用于嵌入式系统开发,如机顶盒、移动电话和PDA之类嵌入式消费电子设备。
  • javaSE(Java 2 Standard Edition,Java 2平台的标准版),主要应用于桌面应用软件的编程。
  • javaEE(Java 2Enterprise Edition,Java 2平台的企业版),主要应用于分布式的网络程序的开发,如电子商务网站和ERP系统。

jdk的安装

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

Java的第一个程序

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

Java语言需要先编译然后解释运行

  • 编写的Java文件(.java)要先经过编译,生成字节码文件(.class),java程序的运行需要jvm的支持为字节码文件提供运行环境。jvm是一个软件,安装在操作系统中。
  • Java源文件(.java) → java字节码文件(.class)→JVM→ 操作系统

Java的编译期和运行期

  • 编译期:通过Javac命令编译源程序,编译(.java文件)生成字节码文件(.class)
  • 运行期:通过Java命令启动jvm加载.class文件然后运行.class文件

Java的跨平台

Java的一大特点跨平台:实现"一处编译,到处使用"。Java有一个核心:JVM,Java Virtual Machine(Java虚拟机),它用于解释Java的字节码文件。Java官方提供了针对不同平台的JVM软件,这些JVM遵循相同的标准,只要是标准的.class文 件,就可以在不同的操作系统上运行,且运行结果一样。

编写Java程序的注意事项

  • Java的每一个程序都要创建class类,这是jdk指定的规则。
  • Java的每一个程序都有一个main方法,称为主函数或入口函数,是程序启动的依赖。
  • Java中严格区分大小写和中英文字符等,程序中涉及的符号([]、()、{})必须是成对出现的。
  • 标识符 :为 ”变量、类(接口)、方法“ 进行命名的符号
  • 1、标识符的开头只能以_、$、字母
    2、标识符的中间和结尾以_、$、字母、数字为主要内容
    3、不能以关键字或者特殊字符命名,(长度、大小写、换行)
    4、见名知意(对变量进行特殊的名称定义,会帮助我们或者其他开发者理解程序功能,翻译软件)
  • 1、驼峰法 我的苹果 ==> my apple ==> myApple MyApple
    首写字母小写 :小驼峰法  主要用于变量、方法命名
    首写字母大写 :大驼峰法  主要用于类 或者接口命名
    2、下划线隔断法  我的苹果 ==> my_apple

Java中的语句注释

  • 单行注释 快捷键:ctrl + /
//123abc
  • 多行注释 快捷键:ctrl+shift+/
/*123abc
12245
58525*/
  • 文档注释
/**
123abc
12245
58525
 */

Java变量

  • 变量:是指在内存中的一块存储空间,用于存储程序运算过程中需要用到的数据

变量的定义

变量声明的语法规则:变量类型  变量名字=初始值;

Java变量变量的定义未经声明的变量不能使用
一条语句中声明多个同类型变量,用逗号隔开
变量的命名

名字必须符合Java标识符语法规则,可以由字母、数字、_、$组成

首字母不能以数字开头、区分大小写命名时需要注意、不能使用

Java保留字。

见名知意,驼峰命名法,避免中文
变量的初始化未经初始化的变量不能使用
定义时初始化初次使用前初始化
变量的使用和访问可以对变量的值进行存取和操作
变量操作需遵守定义时的数据类型

变量相关代码

package day2;
//定义(声明)变量
public class vardemo {
    public static void main(String[] args) {
        //1.定义变量
        int a ; //定义一个整形变量a
        a = 100 ; //“=”: 表示给变量赋值
        int b ;
        b = 200 ;
        int c = a + b ;
        System.out.println("c:" + c);
        //2.定义变量的时候,直接给变量赋值
        String birth = "2000-10-10";
        //int a = 22 ; //编译错误:同一个代码区域内,不允许变量名重复
        int age = 22 ;
        System.out.println("你出生于:" + birth  + ",今年" + age + "岁");
        //3.未经声明的变量不能使用
        //address = "看DNF"; 编译错误,未经声明的变量不能直接使用
        String address ;//声明变量
        address = "在看放空单费";
        //4.一条语句声明多个变量
        int a1 , a2 , a3 ;
        //System.out.println(a1 + a2 + a3);//编译错误:没有初始化的变量,不能直接做加法运算。
        a1 = 5 ;
        a2 = 6 ;
        a3 = 7 ;
        System.out.println("和:" + (a1+a2+a3));
        int b1= 7 ,b2= 8 ,b3=9 ;
        System.out.println("和:" + (b1+b2+b3));
        //5.变量名规则
        int $ = 100;
        int _ = 200;
        //int * = 300;//编译错误:变量名只能包含数字 字符 _  $,并且不能是纯数字
        String name = "alice";
        //System.out.println(Name);//编译错误:严格区分大小写
        //int int = 2022111;//编译错误:不能用关键字作为变量名
        String englishName = "张老师";//这里不是驼峰命名法:第一和单词首字母大写,后续单词首字母小写

    }
}

Java中的关键字

abstractassertbooleanbreakbytecontinue
casecatchcharclassconstdouble
defaultdoextendselseenumfinal
finallyfloatforgotolongif
implementsimportnativenewnullistanceof
intinterfacepackageprivateprotectedpublic
returnshortstaticstrictfpsuperswitch
synchronizedthiswhilevoidthrowthrows
transienttryvolatile

Java中的交接班数据类型

类型名称字节空间类型说明
byte一个字节(8位)存储一个字节数据
short两个字节(16位)兼容性考虑,一般不用
int四个字节(32位)存储整数(常用)
long八个字节(64位)存储长整数(常用)
float四个字节(32位)存储浮点数
double八个字节(16位)存储双精度浮点数(常用)
char两个字节(8位)存储一个字符

整形int

  • int是最常用的整数类型:4个字节(32位) 最大表示范围:-2147483648~2147483647
  • 整数类型的直接量(literal)默认是int类型。
  • 两个int整数相除(/),结果取整,舍弃小数部分(非四舍五入),结果还是整数。
  • 整数运算要防止溢出 -整数运算的过程中,运算结果,如果超过了整数能表示的最大范围,会发生溢出。 正数过大溢出,结果变为负数;负数过小溢出,结果变为正数。
  • int类型代码
package day2;
//int数据类型介绍
public class lntDemo {
    public static void main(String[] args) {
        //1.int的数据是占4个字节
        int a = 10000 ;
        System.out.println("a:" + a);//输出变量a
        //int a1 = 10000000000;//编译错误:超过了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=13
        int c2 = a1 - a2;//c2=5
        int c3 = a1 * a2;//c3=36
        int c4 = a1 / a2;//取整:Java程序中规定,两个整数的运算结果只能是整数(9/4 等于2)
        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类型直接量的表示,需要在数据后面加一个Ll;
  • 通过long类型来存储系统当前毫秒数,jdk提供了一个方法( System.currentTimeMillis() ,来获 取从1970.1.1日零时至今的毫秒数, 返回结果为long.
  • 对于较大的整数运算(超出int范围),可以使用long型。
  • long长整型代码
package day2;
//long:长整型,8个字节,如果int的数据范围不够,可以使用long
public class LongDome {
    public static void main(String[] args) {

        //1.定义long类型的变量
        long a1 = 100;
        //java中直接量默认为int类型
        //long a2 = 10000000000;//超过了int的范围,所有导致编译错误
        long a2 = 1000000000L ;//在直接量后,添加“L”或“l”的标志,表示这个直接量是long类型

        //2.时间毫秒数
        //练习:自己计算一年的毫秒数
        //long micro = 365L * 24 * 60 * 60 * 1000 ;//全部都是int类型参与运算,结果就是int类型,超过int范围就溢出
        long micro = 365L * 24 * 60 * 60 * 1000 ;
        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类型,需要在数据后面加Ff
  • 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.0
        System.out.println(a1 - a3);//2.0
        System.out.println(a1 * a3);//5.25
        System.out.println(a1 / a3);//2.3333333333335
        System.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);
    }
}

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’;
  • 转义字符(\:对于不方便输出的字符,采用转义字符表示。
转义符含义Unicode值
\b退格

\u0008

\n换行\u000a
\r回车\u000d
\t制表符(tab)\u0009
\"双引号\u0022
\'单引号\u0027
\\反斜杠\u005c
  •  代码
package day2;
//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);//65
        int c = '中';//'中'对应的编码,赋值给c
        //3.字符的表达方式
        char d = '0';
        char d1 = 48 ;
        char d2 = '\u0048';
        System.out.println(d + ":" + d1 + ":" + d2);
        //4.字符的运算
        char d3 = '0';
        char d4 = '9';
        System.out.println(d4-d3);
        //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指数计算

package day2;

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();
        //计算bmi
        bmi = w / (h * h);
        System.out.println(name + ",你的bmi:" + bmi);
    }
}

boolean类型

  • boolean类型即布尔类型,适用于逻辑运算,在程序流程控制中作为条件判断。
  • boolean类型的值只有两个:true/false,不能用0或非0代替true/false.
  • boolean类型不能与整数类型做转换。
  • 代码
package day3;
//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=false
        c = a || b ; //c=true
        c = !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("未成年.");
        }
    }
}

 数据类型之间的转换

  • 自动数据类型转换(隐式转换):小类型自动转为大类型。
  • 强制数据类型转换:从大类型转到小类型需要强制转化,可能会有精度损失或者溢出。
  • 数据类型从小到大:byte→ short(char)→int→ long→ float→ double
  • 代码
package day3;
//--数据类型转换
//  自动类型转换
//  强制类型转换
public class DataTypeDemo {
    public static void main(String[] args) {
        //1.自动类型转换
        long a1 = 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);//100
        System.out.println("a2:" + a2);//3
        //3.强制造成精度损失或溢出
        double d = 3.1415926666666 ;
        float d1 = (float)d;
        System.out.println("精度损失:" + d1);

        long data = 1000000000L;
        int  data1 = (int)data;
        System.out.println("溢出:" + data1);
        //4.byte,short两种数据
        byte b1 = 100;//自动类型转换
        //short s1 = 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 = 0.5F;
        int l6 = (int)l5;
        //d.定义一个boolean类型的变量,然后赋值给byte类型
        boolean l7 = true;
        //byte l8 = l7; 编译错误:boolean不能转换为整形
    }
}

 Java算数运算符

  • Java中的算数运算符,包含:+(加),-(减),*(乘),/(除),%(取余),++(自增),--(自 减)
  • 两数相除:1、两数都是整数类型,求整数商
             2、两数任意一个是浮点数,求浮点数的商
  • ++(自增),--(自减)运算是在自身值的基础上,增加或者减少1
  • ++i写在变量的前面,运算的时候,需要先增加或者减少1,再参与运算。
  • i++写在变量的后面,运算的时候,需要先参与运算,再增加或者减少1
  • “+”,“-”,可以作为数据正负符号。
  • 代码
package day3;
//算数运算符:+、-、*、/、%
//          ++(自增)、--(自减)
//          符号(+、-)
//能做算数运算的类型: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);//13.5
        //2.除法运算
        double data4 = data1/3 * data2 ;//运算结果以大范围为准
        System.out.println("data4:" + data4);//10.5
        data4 = 1/2; //0.0:这里1、2都是int类型,所以结果为0.但是吧int的数据赋值给double类型,所有最终值是0.0
        System.out.println("data4:" + data4);
        data4 = 1/2.0;
        System.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);//6
        i -- ;//自减: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=5

        int i1 = i++ + j++ + i--;


        //5.符号(+,-)
        int m1 = -5 ;//负号
        int m2 = +5;//正号
        int m3 = -5-5 ;
        System.out.println("m3:" + m3);//-10
        int m4 = -5 + -10 ;
        System.out.println("m4:" + m4);//-15
        int m5 = -5 + +10;
        System.out.println("m5:" + m5);//5
    }
}

 Java关系运算符

  • Java中的关系运算符,包含:>(大于)、<(小于)、==(等于)、>=(大于等于)、<=(小余等于)、!=(不等于)。
  • 关系运算的结果为boolean类型。
  • 代码
package day3;
//关系运算:
//      大于(>)、大于等于(>=)、等于(==)、不等于(!=)、小于(<)、小于等于(<=)
//      能进行关系运算:byte、short、int、long、char、 float、double
//      不能进行关系运算:boolean、其他的引用类型
public class GuanXiDemo {
    public static void main(String[] args) {
        //1.关系运算的结果是boolea类型
        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);
            }
        }
    }
}

 Java逻辑运算符

  • && “运算
  • || “运算
  • 运算
  • 逻辑运算的结果为boolean类型。
  • 与或的混合判断
    逻辑与 的优先级高于 逻辑或,所以先执行与运算。
    注意:非运算 高于”与,或“运算。(仅次于括号的优先级)
  • 代码

package day3;
//逻辑运算:与&&、||或、!非
//运算规则:与运算(全为真这结果为真,有假则结果为假)
//        或运算(全为假这结果为假,有真则结果为真)
//        非运算(真变假,假变为真,本质就是取反)
//逻辑运算的结果是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 ;//true
        b4 = b1 && b2 && b3;//false
        b4 = b1 || b3;//true
        b4 = b1 || b2 ||b3;//true
        b4 = !b3;//true
        b4 = !(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是4

         boolean 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
    }
}

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

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

“+” 字符串拼接 

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

三目运算符  

  • 三目运算符格式: X ? Y : Z;  boolean表达式?表达式1 : 表达式2
  • Xboolean表达式,如果Xtrue,在运算结果为Y的值, 如果Xfalse,则运算结果为Z的值。

 java运算符的优先级

 

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

package day3;
//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+=20完全等价于k=k+20,所以k=30
        System.out.println("k:" + k);

        k /= 4 ;//k=k/4,所以k=7
        System.out.println("k:" + k);
        //2.“+”:用于字符串拼接
        String str =  "hello";
        System.out.println( k + k + str);//"14hello"
        System.out.println( k + str + k);
        System.out.println( str + k + k);
        System.out.println( str + (k+k));
        System.out.println( (str+k) + k + k);
        System.out.println( str + k + k);
        System.out.println( k + k + k + k);
        //三目运算
        int age = 19;
        String info = age >= 18 ? "成年人" : "未成年人" ;//需要吧三目运算的结果赋值给一个变量保存起来
        System.out.println("你现在:" + age + "岁,你是:" + info);
    }
}

案列:三目运算符找最大值

package day3;

import java.util.Scanner;

//用三目运算,判断出用户输入的两个数据中最大的那个
public class MaxData {
    public static void main(String[] args) {
        //boolean ? 表达式1 : 表达式2
        Scanner 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程序的结构

  • 任何复杂的程序都是由"顺序结构"、"分支结构"、"循环结构"组成
  • 顺序结构:程序从上到下一句一句执行
  • 分支结构:程序设计根据指定的条件进行分支, 根据某个结果选择运行
  • 循环结构:根据给定的条件反复进行循环,直到条件不成立为止

 分支结构

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

package day4;

import java.util.Scanner;

//练习:用户输入1-7的整数,然后程序转换“星期几”
public class IfElseManyDemo1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.printf("请输入1-7的数据:");
        int x = sc.nextInt();
        if(x < 0 || x > 7) {
            System.out.printf("输入的数据不合理,请重新输入");
        }else{
            if (x == 1) {
                System.out.printf("本天是星期一");
            } else if (x == 2) {
                System.out.printf("本天是星期二");
            } else if (x == 3) {
                System.out.printf("本天是星期三");
            } else if (x == 4) {
                System.out.printf("本天是星期四");
            } else if (x == 5) {
                System.out.printf("本天是星期五");
            } else if (x == 6) {
                System.out.printf("本天是星期六");
            } else if (x == 7) {
                System.out.printf("本天是星期日");
            }
        }
    }
}
import java.util.Scanner;

public class Work02 {

    //计算BMI指数
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        System.out.println("请输入身高(米):");
        double height = scan.nextDouble();
        System.out.println("请输入体重(千克):");
        double weight = scan.nextDouble();

        double bmi = weight / (height * height);

        System.out.println(bmi);
        if(bmi < 18.5){
            System.out.println("偏瘦");
        }else if(bmi < 24){
            System.out.println("正常");
        }else{
            System.out.println("偏胖");
        }

    }

}

 

  • switch代码

package day4;

import java.util.Scanner;

//switc ... case的语法规则
//switch(变量) {
//  case 数值1:...
//  case 数值2:...
//  default:...
//  }
public class SwitchDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.printf("请输入数据值1~7:");
        int week = sc.nextInt();
        switch (week){
            case 1:
                System.out.printf("星期一");
                break; //break:中断Java中的关键字,这里表示执行完case之后,整个Switch语句块结束
            case 2:
                System.out.printf("星期二");
                break; //break:中断Java中的关键字,这里表示执行完case之后,整个Switch语句块结束
            case 3:
                System.out.printf("星期三");
                break;
            case 4:
                System.out.printf("星期四");
                break;
            case 5:
                System.out.printf("星期五");
                break;
            case 6:
                System.out.printf("星期六");
                break;
            case 7:
                System.out.printf("星期日");
                break;
            default:
                System.out.printf("数据不合理,请重新输入。");
        }
    }
}
package day4;

import java.util.Scanner;

public class SwitchDemo2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("*******ATM*********");
        System.out.println("*******0.取钱*********");
        System.out.println("*******1.存钱*********");
        System.out.println("*******2.查询*********");
        System.out.println("*******3.转账*********");
        System.out.println("*******4.退卡*********");
        int num = sc.nextInt();
        switch (num){
            case 0:
                System.out.println("取钱成功!");
                break;
            case 1:
                System.out.println("存钱成功!");
                break;
            case 2:
                System.out.println("查询成功!");
                break;
            case 3:
                System.out.println("转账成功!");
                break;
            case 4:
                System.out.println("退卡成功!");
                break;
            default:
                System.out.println("操作失败");
        }
    }
}

循环结构:for循环

  • 循环是程序设计语言中反复执行某些代码的一种计算机处理过程,是一组相同或相似的语句被有规 律地执行。
  • 循环三要素:循环变量初始化、循环条件(以循环变量为判断条件)、循环变量的改变(向着循环结束变)
  • for循环是最经典的循环语法,也是程序使用最多的循环方式。
  • for循环语法规则:for(表达式1;表达式2;表达式3){语句块}
  • 表达式 1 :初始化表达式,负责完成循环条件的初始化
    表达式 2 :循环条件表达式,值为 boolean 的表达式,指定循环条件
    表达式 3 :循环后的操作表达式,负责修改变量,改变循环条件
  • for循环流程:执行 语句1,再判断boolean表达式,如果为true,继续执行,如果boolean表达式为false则执行语句2
  • 代码 
public class Work03 {

    //水仙花数
    // 三位数分别求三次幂的和 是自己本身
    public static void main(String[] args) {

        for(int a = 1; a <= 9; a++){
            for(int b = 0; b <= 9; b++){
                for(int c = 0; c <= 9; c++){
                    if(a * 100 + b * 10 + c == a * a * a + b * b * b + c * c * c){
                        System.out.println(a * 100 + b * 10 + c);
                    }
                }
            }
        }
    }

}

 

public class Work05 {

//    * 5、抛小球
//    *   以一个高度抛出小球,小球弹起高度的一半后,再次下落
//    *   当小球弹了n次,它距离地面的距离为多少。
     // 求小球总共走了多长距离
    public static void main(String[] args) {

        int n = 6;
        double h = 100;
        double sum = 0;
        for(int i = 0; i < n; i++){
            sum += h;
            //特殊:从右往左运算.
            sum += h = h / 2;
        }
        System.out.println(sum);
    }

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

        //练习:1+1/2+1/3....+1/888的和
        double sum1 = 0;//保存和,0不影响加法运算的结果
        for (int i=1 ; i<=888 ; i++){
            sum1 +=1.0 / i ;//sum +=i:sum=sum+i,每一次重复做的事
        }
        System.out.println("1+1/2+1/3....1/888:" + sum1);
    }
}
  •  for循环执行顺序

while循环代码

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

案列:猜数字

package day4;

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循环

  • while循环先判断,再执行; do…while先执行一次,再判断。 While循环比do…while循环用得多。
  • 循环没有指定结束条件的情况下会造成死循环也就是无限循环
  • do...while代码
package day5;

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 = 0;//记录次数
        int pwd;
        do{
            if(count == 6){
                System.out.println("抱歉你的次数已用完,请半小时后在尝试");
                //break;//结束循环
                return;//结束整个程序的运行
            }
            System.out.println("请输入密码:");
            pwd = scanner.nextInt();
            count ++;//改变输入的次数
        }while (pwd != 1234656);
        System.out.println("手机解锁成功了");
    }
}

break & continue

  • break可用于循环语句或switch语句。
  • break用于循环,可使程序终止循环从而执行循环后面的语句。常常与条件语句一起使用。
  • continue 用于循环语句中,表示跳过循环体剩余语句,继续执行下一次循环。 continue 只能在循环语句中使用。
  • 代码
package day5;

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;//记录分数,增加10分
                }
            }
        }
        //for循环结束,表示考试结束了显示最终得分
        System.out.println("最后得分:" + score);
    }
}

 循环的嵌套

  • 循环的内部,再有其它循环,就是循环的嵌套。
  • 外层走一次,内层走所有次 。循环层数越少越好,效率越高
  • 代码
package day5;
//循环的嵌套:循环的内部还包含一个循环
//     ***
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(); //输出一个回车换行
        }
    }
}

数组

  • 数组:相同数据类型元素组成的集合
  • 数组的声明语法:数据类型[] 数组名 = new 数据类型[],例如:string[] arr = new string[5];
  • 数组new之后,每个元素都有默认值。int、long默认值为0double默认值为0.0boolean默认值为false,char默认值为空字符。
  • 元素按线性顺序排列。所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素; 除最后一个元素外,每一个元素都有唯一的后继元素(“一个跟一个,可以通过元素所在位置的顺序号(下标)做标识来访问每一个元素(下标从0开始,最大到元素的个数-1
  • 代码
package day5;
//array - 数组
// 当我们有一组数据需要保存在一个变量中时,
public class ArrayDemo {
    public static void main(String[] args) {
        //1.定义一个数组
        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','C',10};//arr2的长度是4,每个位置上的元素已经指定了
        double[] arr3 = new double[]{5.2,1.5,2.3,3.1};//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,正好就是数组的每一个元素
        }
    }
}
  •  数组的位置交换
package day5;

public class ArrayDemo2 {
    public static void main(String[] args) {
        //1.创建一个长度为10的整形数组
        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++){
            System.out.print(arr[i] + "\t");
        }
    }
}

数组的排序

  • 冒泡排序:所谓的冒泡算法就是从左往右依次比较两个数大小,若前一个数大于后一个数,则两个数交换位置
  • 升序
package day5;
//bubble: 泡
//冒泡排序:双重for循环,外层for循环走一次,内层循环走n次,就能吧数组中的一个元素的位置排好
public class MaoPaoDemo {
    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、5
                if(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.println(arr[i] + "\t");
        }
    }
}
  • 降序
package day5;
//bubble: 泡
//冒泡排序:双重for循环,
public class MaoPaoDemo1 {
    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、5
                if(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.println(arr[i] + "\t");
        }
    }
}

 排序

import java.util.Arrays;

public class Demo10 {

    public static void main(String[] args) {
        //问题 ["红","蓝","绿","蓝","红","绿"]
        // 按照:' 绿 < 蓝 < 红 '的规则排序
        String[] b = {"红","蓝","绿","蓝","红","绿"};

        for(int j = 0; j < b.length - 1; j++){
            for(int i = 0; i < b.length - 1; i++){
                if(b[i] == "蓝" && b[i+1] == "绿" || b[i] == "红" && b[i+1] == "蓝"|| b[i] == "红" && b[i+1] == "绿" ){
                    String tmp;
                    tmp = b[i];
                    b[i] = b[i+1];
                    b[i+1] = tmp;
                }
            }
        }
        System.out.println(Arrays.toString(b));
    }

}

数组复制和数组扩容

  • JDK提供对数组进行复制的方法,即将一个数组(源数组)中的各个元素值复制到另一个数组(目标数组)中:
  • 数组的长度在创建后不可以改变的。所谓扩展是指创建一个更大新数组,并将原有数组的内容复制到其中。 Jdk提供了一个方法,Arrays.copyOf 可以实现数组的扩容
  • 代码
package day5;

import java.util.Arrays;

//数组复制并且扩容
public class ZuoYiDemo1 {
    public static void main(String[] args) {
        //1.创建了字符串数组
        String[] strs = new String[4];//元素的默认值是null
        for (int i=0;i< strs.length;i++){
            //System.out.print(strs[i] + "\t");
            strs[i] = "tom" + i;//给数组元素赋值
        }
        System.out.println();
        //2.Arrays.toString的使用
        String str= Arrays.toString(strs);//调用Arrays.toString方法,实现吧数组类型转换为字符串类型
        System.out.println("str" + str);//[tom0,tom1,tom2,tom3]
        //3.数组扩容
        //strs[4] ="tom4";//运行时错误:数组的长度为4,下标只能为0,1,2,3, 这里strs[4]就会抛出异常
        strs = Arrays.copyOf(strs, strs.length+1);//Arrays.copyOf(原数组,新的长度)
        strs[4]="tom";
        System.out.println(Arrays.toString(strs));
        //练习:把2~100区间的质数找出来,保存在一个数组中,然后输出这些质数
        int[] datas={2,3};//数组的长度是2
        int count=0;//统计循环次数
        for (int i=2;i<100;i++){
            for (int j=2;j<=Math.sqrt(i);j++){
                if (i%j==0){
                    break;//说明不是质数,循环结束
                }
                if (j==(int)Math.sqrt(i)){
                    //说明i是质数,把i保存到数组中
                    //对数组扩容
                    datas= Arrays.copyOf(datas,datas.length+1);
                    datas[datas.length-1]=i;
                }
                count++;//没循环一次,count+1
            }
        }
        System.out.println("count:" + count);
        System.out.println("datas:" + Arrays.toString(datas));
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值