java编程入门

#Java编程入门
初步了解方法的定义方式和相互调用
掌握递归调用
理解和使用数组
掌握常见类的基本使用,String字符串、Random随机类、Math数学库类和日期类
程序=算法+数据结构
用户使用编程语言实现问题域到解域的映射,细节描述算法
汇编语言–贴近于硬件设备
高级语言–C#、Java–贴近于自然语言–需要编译过程将高级语言所编写的程序转换为计算机能够识别的01码
中级语言–C,Java
一种编程语言、一种开发环境、一种应用环境、一种部署环境
Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。Java技术具有卓越的通用性、高
效性、平台移植性和安全性(以牺牲执行效率为代价换取了高安全性),广泛应用于PC、数据中心、
游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群
Java完全面向对象的编程语言,主要用于Internet应用程序
Java 既是一种解释执行的语言(先编译后解释执行),也是一种编译执行的语言
Sun公司对Java编程语言的解释是:Java编程语言是个简单、面向对象、分布式、解释性、健壮
(鲁棒性)、安全与系统无关、可移植、高性能、多线程和静态的语言(从JDK8开始引入了一些动
态语言的特性)
Java平台是基于Java语言的平台。这样的平台非常流行。因此微软公司推出了与之竞争的.NET平台
以及模仿Java的C#语言
首先将源代码编译成二进制字节码(bytecode不是机器语言),然后依赖各种不同平台上的虚拟
机来解释执行字节码。从而实现了【一次编译、到处执行】的跨平台特性。不过,每次的执行编译
后的字节码需要消耗一定的时间,这同时也在一定程度上降低了Java程序的性能
Java是一个开发环境,Java技术包含一系列的工具:编译器,解释器,文档生成工具,打包工具
等。另外由Java 2 SDK提供的JRE还包括了一个完整的Java集合,如基本语言类,GUI控件类等
Java是一个运行环境,它可以从Oracle公司提供的Java 2 SDK中来搭建运行环境,免费
Java主要技术分支
JavaSE【J2SE】:Java标准版,主要用于桌面应用或者局域网应用开发
Java 语言核心类: 数据库连接, 接口定义,输入/输出和网络编程
JavaEE【J2EE,最新名称 JakartaEE】:java企业版,主要用于企业级电子商务应用开发
包含JAVA SE 中所有类,并且还包含用于开发区企业级应用的类,如EJB、Servlet、JSP、XML…
JavaEE【Spring框架】目前已成为开发电子商务应用的事实标准
企业级的概念:跨地域性、数据来源复杂性
JavaME[J2ME]:java精简版,主要用于受限环境开发
Android所替代----下一步鸿蒙?
Java应用场景
Java编程语言是一种广泛应用于互联网应用的高级计算机语言,主要应用于网络编程和互联网电子商务
应用,特别适合于Internet应用程序开发。
Java的三种核心机制
Java虚拟机JVM
JVM创造一个内部运行时系统(runtime system来执行Java代码,包括:加载.class字节码文件、管理内存、执行垃圾收集)
Java程序并不是在本机操作系统上直接运行,而是通过Java虚拟机向本机操作系统进行解释来运行。这就是说,任何安装有Java虚拟机的计算机系统都可以运行Java程序,而不论最初开发应用程序的是何种计算机系统
java虚拟机的建立需要针对不同的软硬件平台做专门的实现,既要考虑处理器的型号,也要考虑操作系统的种类
JDK 包含JVM和其他工具以及所有的API和相关文件
垃圾收集机制Garbage Collection
Java编程语言解除了程序员取消分配存储器的责任,它可提供一种系统级线程以跟踪每一存储器的分配情况。在Java虚拟机的空闲周期,垃圾收集线程检查并释放那些可被释放的存储器
不再使用内存空间回收——垃圾回收
在C/C++等语言中,由程序员负责回收无用内存。Java语言消除了程序员回收无用内存空间的责任,它提供了一种系统级线程跟踪存储空间的分配情况,并在JVM的空闲时检查并释放哪些可被释放的存储空间。
垃圾收集在Java程序原型过程中自动运行,程序员无法精确控制和干预代码安全性检测Code Security
在运行时,执行机器只是将.class类文件通过交互后使用,一般情况下是看不到它的源代码.Java,如果想要看到.Java源程序,就要通过专用反编译工具,才能够看到。这就体现了Java在运行环境中相对其它语言来说,加强了代码的安全性
安装环境
官方网站oracle.com
版本选择问题
JDK为java开发工具,全称为Java Development Kit。除了运行和编译所需要的相关工具外,最重要的是
提供了很多预先定义好的程序,可以直接使用。
首先JDK可以分为Open JDK和Oracle JDK两个系列
OpenJDK是基于Oracle JDK源代码构建的,因此Oracle JDK和OpenJDK之间没有重大的技术差异
Oracle JDK将更多地关注稳定性,它重视更多的企业级用户,而OpenJDK经常发布以支持其他性能,这可能会导致不稳定
Oracle公司把JDK分成了两种维护情况,即非长期支持版和长期支持版LTS。对于非长期支持版
non-LTS而言,Oracle只会提供6个月的支持维护;而对于长期支持版本LTS,则提供8年的支持维
护。
JDK8 JDK11 JDK17【oracle发布了免费协议】
JDK的官方下载地址是:https://www.oracle.com/downloads
要求注册,可以从baidu上查找别人注册的账号进行使用
JDK和JRE
jdk:java开发工具箱,提供了java程序的开发工具和运行环境
jre:Java运行时环境,提供了java的运行环境支持
首先安装所使用的操作系统下载对应的JDK,注意统一使用JDK8或者JDK11
windows下的安装
按照JDK8安装向导一步一步的执行,在选择安装内容时其中的公共JRE可装可不装,因为JDK中自带的就
有JRE,而公共JRE是脱离JDK的JRE。安装JDK8以上版本则不会安装JRE
JDK11是模块化设计,不再包含JRE,而是按需生成,需要哪个模块,就将哪个模块打包成JRE,而
不需要引入无关紧要的其他模块,可以大幅缩小JRE体积。
在bin目录下可以看到jlink.exe文件,可以使用这个工具。再打开jmods文件夹,可以看到71个以
jmod为结尾的文件,其实jmod文件就是一个压缩包,可以使用加压缩文件打开,里面包含了
class文件和其他文件。
基础命令格式【jlink --module-path “java模块位置” --add-modules 加入需要的模块,多个用英
文逗号隔开 --output “指定生成的jre文件夹路径”】,例如 bin\jlink --module-path jmods –
add-modules java.base,java.desktop --output jre 。
如果在使用自定义的JRE运行java程序时,出现NoClassDefFound错误,说明JRE中没有添加相关
的模块。首先需要确定缺少的 class 存在于那个JDK module 中,然后在jlink 命令中添加到–addmodules列表中,重新生成JRE就可以了
注意:在JDK的安装路径中不要出现中文、空格之类的特殊符号
配置3个参数(环境变量—系统变量):在JDK11只需要配置2个
JAVA_HOME:JDK的安装路径,例如C:\Java\jdk1.8.0_172
CLASSPATH:其中的值有3个,在Windows下使用分号进行分割,在Linux下使用冒号做分割
.表示当前目录
C:\Java\jdk1.8.0_172\lib\rt.jar
C:\Java\jdk1.8.0_172\lib\tools.jar
Path:注意是修改,不是创建,不要删除旧有配置,否则可能windows无法正常使用
在配置的末尾追加;C:\Java\jdk1.8.0_172\bin;
验证:在命令上运行命令
java -version查看当前jdk的版本号
javac -version查看当前jdk的版本号
Linux下的安装
如果在Linux下安装Oracle JDK,则需要首先卸载系统默认安装的OpenJDK
rpm -qa | grep java查看系统中所安装的java套件
-q 使用询问模式,当遇到任何问题时,rpm指令会先询问用户
-a 查询所有套件
-e <套件档>或–erase<套件档> 删除指定的套件
–nodeps 不验证套件档的相互关联性
rpm -e --nodeps 后面跟系统自带的jdk名
rpm -ivh jdk-8u181-linux-x64.rpm
编辑profile文件 vi /etc/profile
保存退出后,执行source命令生效
source /etc/profile
测试是否安装成功: java -version
export JAVA_HOME=/usr/java/jdk1.8注意这里是具体的安装位置
export
CLASSPATH=.: J A V A H O M E / j r e / l i b / r t . j a r : JAVA_HOME/jre/lib/rt.jar: JAVAHOME/jre/lib/rt.jar:JAVA_HOME/lib/dt.jar: J A V A H O M E / l i b / t o o l s . j a r e x p o r t P A T H = JAVA_HOME/lib/t ools.jar export PATH= JAVAHOME/lib/tools.jarexportPATH=JAVA_HOME/bin:$PATH
Hello Java
在windows下可以自行安装一个文本编辑工具,推荐editplus或者记事本
1、使用任意的文本编辑工具编写一个后缀为.java的文本文件
touch Hello.java
Java是面向对象的编程语言,要求编写程序的开始就是定义类的开始
2、编译程序为字节码文件【名称和源代码文件一致,只是后缀为.class的二进制文件】,JDK中自带编
译器javac
javac Hello.java。如果有语法错误则编译失败,并进行告错
3、使用解释器java解释执行字节码文件
java Hello[这里不是文件名称,是类名称,所以没有后缀class]
如果使用文本编辑工具编写代码,问题在于没有任何提示,编码效率低;而且不停的需要进行切换【编
辑发现问题–修改源代码】。所以需要使用IDE工具(集成开发环境),在工具中可以直接编写代码,编
译源程序并执行
IDE集成开发环境:
Eclipse:JavaSE
IDEA使用较多的工具 JavaEE
STS springboot
Eclipse是IBM号称斥资4000万开发的通用开发平台,添加不同的插件就可以执行不同的工作,Eclipse本
身就是使用Java开发的,所以进行Java开发时不用加任何插件。官方网站eclipse.org
windows下安装
可以直接下载zip后缀的文件,这实际就是一个绿色版的Eclipse,解压缩后可以直接使用

  1. File->new->java project。在Eclipse中所有的代码采用的是项目制进行管理,对应的是一个在
    workspace中的文件夹
    public class Hello { //其中public class是系统定义的关键字,Hello是用户自定义的类名称,要
    求必须和文件名称一致,包括大小写,{}中用于用户自定义程序
    public static void main(String[] args){//这个方法的名称不允许作任何调整,包括大小写,
    这是程序的执行起始点
    System.out.println(“Hello Java!”); //在Java中语句以;收尾,
    System.out.println用于实现在屏幕上输出字串内容,所谓的字串就是引号中所包含的字符序列
    }
    }
    2、所有的源代码定义在src文件夹下,所以可以使用菜单new->class,这里配置的含义不必深究,
    只需要定义类名称即可,如果需要main方法则勾选上,则Eclipse会自动生成代码骨架,只需要添
    加具体的业务代码即可,例如添加System.out.println(“Hello Java!”);
    3、右键点击空白处,在弹出菜单中选择run with—Java Application,则会自动执行程序,并在下
    方的Console窗口显示执行结果
    练习:
    在Centos中下载并安装JDK8
    在Centos中下载并安装Eclipse
    手动编码【不允许使用Eclipse】完成代码hello java
    回顾
    什么是Java语言
    一种面向对象的语言
    编写程序的开始就是编写类的开始 class 用于定义类
    一种平台无关的语言,必须程序运行的解释环境
    真正的运行步骤为 javac编译–java解释执行
    一种健壮【鲁棒性】的语言,吸收了C/C++语言的优点,但是去掉了影响程序健壮性的部分,例如
    指针、内存的申请与释放等。
    典型的应用场景:互联网环境
    常见错误
    1、使用临时变量,Java要求必须是先定义后使用,必须是先赋初值后使用
    2、目前的要求:将所有的程序都必须写在方法内部,不能写在方法外
    int k;
    Systm.out.println(k);
    Java的三种核心机制
    Java语言包含三种核心机制:Java 虚拟机、垃圾收集机制和代码安全检测。
    Java虚拟机 JVM
    Java虚拟机可以理解成一个以字节码为机器指令的CPU
    对于不同的运行平台,有不同的虚拟机
    Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”
    垃圾收集机制 gc
    不再使用内存空间回收——垃圾回收
    在C/C++等语言中,由程序员负责回收无用内存
    Java语言消除了程序员回收无用内存空间的责任,它提供了一种系统级线程跟踪存储空间的分
    配情况,并在JVM的空闲时检查并释放哪些可被释放的存储空间
    垃圾收集在Java程序原型过程中自动运行,程序员无法精确控制和干预
    代码安全性检查
    Java代码的目标运行环境在于网络,Java以牺牲执行性能为代价换取了高安全性
    首先由类加载器classLoader负责将类文件.class加载到Java虚拟机中。通过区分本地文件系统的类
    和网络系统导入的类增加安全性,可以限制任何木马程序,因为本机类总是有限被加载,一旦所有
    的类都被加载完毕,直线文件的内存就固定了。
    其次字节码校验器进行校验。字节码校验器不检查那些可信任的编译器生成的类文件,而是对违背
    命名空间规定和java语言规则的类进行检查,并且关闭具有安全性漏洞的类文件
    最后字节码校验通过后,才由Java解释器负责将类文件解释成为机器码进行执行
    Java中标识符
    字母(Unicode编码字符集)、数字、下划线和 符构成,不允许数字打头严格区分大小写 I S O 8859 − 1 G B 2312 和 G B K 【 G B 8030 】 U n i c o d e 统一编码字符集由 于 和 符构成,不允许数字打头 严格区分大小写 ISO8859-1 GB2312和GBK【GB8030】 Unicode统一编码字符集 由于_和 符构成,不允许数字打头严格区分大小写ISO88591GB2312GBKGB8030Unicode统一编码字符集由有特殊含义,一般不建议用户直接使用
    public class ForTest{
    int res=0;
    for(int k=1;k<101;k++){
    res+=k;
    }
    System.out.println(“1+2+3+…+100=”+res);
    }
    不建议使用中文命名
    不允许使用保留字(goto const)和关键字(public class static…)
    长度没有限制
    编码规范
    类名首字母大写,大写字母分词 建议名词。例如UserName或者MingZi
    方法名称首字母小写,大写字母分词
    变量名称首字母小写,大写字母分词
    包名称全小写,使用域名反转的方式定义
    平常练习中遵循SUN的基础规范;项目开发中要求遵循ali发布的规范。进入公司首先考察公司的编码规范
    Java是一种先编译后解释执行型语言
    javac Hello.java【源代码文件名称】编译,将源代码转换为虚拟机可以识别的中间性质语言,一般生成一个同名的后缀为class的文件【二进制文件,字节码文件】,这里就是跨平台的原理
    java Hello[类名称,就是源代码中class关键字后面所跟的名称]一般是解释执行字节码文件
    Java语法基础
    Java大小写敏感。比如HelloWorld和Helloworld是不一样的
    包名Package是公司、组织、个人的域名的反转,一般是英文字母。英文字母必须是小写
    包名称可以认为是一个名空间
    例如蓝鸥的网址为lanou3g.com,定义包名称为com.lanou3g
    类名ClassName和方法名称采用驼峰命名法,例如StudentName
    Java源文件的文件名必须和文件中公共public类名称一样
    关键字中所有字母都为小写。关键字不能用作变量名,方法名,类名,包名和参数。
    Java是一种自由格式的语言,可用任意个空格、制表符、换行符隔开
    每个词
    System.
    out.
    println
    ( “Counted " + count + " chars.” );
    同时也允许将多行代码写在一行上,注意使用分号隔开。所有的语句末尾以分号;收尾
    java中空语句
    public class Hello { //公共类名称为Hello,则对应的文件名称必须为Hello.java
    }
    for(int i=0;i<10;i++)cc++; dd++;
    常见的编程错误
    目前的要求:将所有的程序都必须写在方法内部,不能写在方法外
    使用临时变量,Java要求必须是先定义后使用,必须是先赋初值后使用
    Java标识符
    标识符可从一个字母(Unicode编码字符集)、下划线_或美元符号$开始,随后也可跟数字、字母、下划线或美元符号。
    标识符是区分大小写,没有长度限制,可以为标识符取任意长度的名字
    标识符不允许使用保留字。关键字对Java编译器有特殊的含义,它们可标识数据类型名或程序构造
    construct名, java语言中的保留字均用小写字母表示变量
    变量是Java程序中的基本存储单元,它的定义包括变量名、变量类型和作用域几个部分
    例如int k=100; 其中int是数据类型,k是变量名 m
    变量名称:在一个方法内部不允许出现多个同名称的变量
    java要求见名知意,例如username。但是xm则不建议使用
    变量类型:
    Java属于强类型编程语言,变量类型一旦声明,则不能进行修改
    数据类型可以决定变量所需要的存储空间大小和对应的处理逻辑
    作用域是指变量的有效范围,一般是在所在花括号范围内;
    int k; 声明一个变量,类型为整形,变量名称为k
    int k=100; 声明变量的同时进行初始化
    k=12.345; 语法错误,因为已经声明了类型为整形,但是12.345不是整数
    d=123; 语法错误,因为Java语法要求对于变量必须是先定义后使用
    public static void main(String[] args){
    {
    System.out.println(k);//错误1:要求临时变量必须是先定义后使用,必须是先赋初值后使

    int k=100;
    System.out.println(k);
    }
    System.out.println(k);//错误2:因为k定义在{}内部,所以k只在上面的{}分为内有效,离开了
    {}则失效,{}外引用k则报错
    }
    JAVA是强类型语言
    每个变量有类型,每个表达式有类型,而且每种类型都是严格定义的
    Java编译器对所有的表达式和参数都要进行类型相容性的检查,以保证类型是兼容的
    任何类型的不匹配都将被报告为错误而不是警告。在编译器完成编译以前,错误必须被改正过来
    在Java语言数据类型可以分为两大类:基本类型和引用类型
    基本类型(原生类型)
    基本类型是指不能再分解的数据类型,其数据在函数的调用中是以传值方式工作的。
    简单数据类型代表单值,而不是复杂的对象
    Java是完全面向对象的,但简单数据类型却不是,它们类似于其他大多数非面向对象语言中的简单数据类型。这样做的原因是出于效率方面的考虑。在面向对象中引入简单数据类型不会对执行效率产生太多的影响。
    Java针对基本类型同时提供了对应的引用类型:包装类
    Java编程语言有八个原始数据类型,可分为4种整型、浮点数、字符型数据和布尔型数据,不会随着计算机类型而变化的,注意Java具有平台无关性,所以不论硬件平台是什么,1B都是8位
    整型有4种:byte字节整、short短整、int整、long长整
    java中的数据采用的是补码的存储方式
    计算机中存储数据有3种不同的方式,分别是原码、反码和补码
    byte:1B(8b),-128到127
    public static void main(String[] args){
    int k=99;
    {
    System.out.println(k);
    int k=100; //错误:因为Java是强类型编程语言,所以在{}外已经声明了k的类型,在k的有效
    范围内不允许重新声明。这里可以修改为k=100;
    System.out.println(k);
    }
    System.out.println(k);
    }
    short k1=123;
    int k2=k1;//没有错误
    String s1=“123”;//字符串类型
    int k1=s1;//语法报错
    byte k = 100;//语法正确100在指定范围内
    byte kk = 130;//语法报错,因为130超出byte的存储范围限制
    //这里的面试点在常量池
    short:2B,-32768到32767
    int:4B,-2147483648到2147483647
    long:8B,-9223372036854775808到9223372036854775807
    如果需要使用具体的上下限取值,可以通过包装类中的常量进行使用十进制整数。如123,-456,0
    八进制整数。以0开头,如0123表示十进制数83,-011表示十进制数-9。
    十六进制整数。以0x或0X开头,如0x123表示十进制数291,-0X12表示十进制数-18
    a–>10 b–>11 c–>12 d–>13 e–>14 f–>15
    二进制整数,以0b或0B开头,例如0b10110010
    可以通过包装类中提供的方法将十进制数转换为2、8和16进制
    整数类缺省为int类型,如在其后有一个字母“l或者L”表示一个long值
    浮点数类型
    float单精度、double双精度
    float是4B,可以保证小数点后6位有效精度和第7位的部分精度 e38
    double是8B,可以保证小数点后15位有效精度和第16位的部分精度。e308
    浮点数是无法精确存放的,原因在于将浮点数转换为补码时的限制
    System.out.println(Integer.MAX_VALUE);
    System.out.println(Integer.MIN_VALUE);
    int k1=123;
    int k2=0123;
    int k3=0x123;
    int k4=0b100101;
    System.out.println(k1+“\t”+k2+“\t”+k3+“\t”+k4);//具体输出时,系统会自动将k2转换为10进
    制输出
    int k = 123;
    String ob=Integer.toBinaryString(k);//将十进制数转换为2进制的字符串
    System.out.println(ob); //1111011
    String oo=Integer.toOctalString(k);
    System.out.println(oo); //173
    String oh=Integer.toHexString(k);
    System.out.println(oh);//7b
    123系统会自动识别为int类型
    123L或者123l系统自动识别为long
    针对浮点数则不能使用等值判断
    Java浮点数都是用科学计数法来存储数据的,无论是单精度还是双精度在存储中都分为三个部分:
    符号位Sign : 0代表正,1代表为负,是第一位指数位Exponent:用于存储科学计数法中的指数数据,单精度为8位,双精度11位。用指数部分的值(8位/11位unsigned)的值减去偏移附加值得到该数实际的指数。例如值为200,实际指数为73=200-127,对于双精度的double来说常量1023,尾数部分Mantissa
    样例17.625在内存中的存储为:
    首先要把17.625换算成二进制:10001.101
    整数部分:除以2,直到商为0,余数反转
    小数部分:乘以2,直到乘位为0,进位顺序取。(即:乘2取整法)
    再将10001.101右移,直到小数点前只剩1位,1.00011012^4 ,右移动了四位。
    底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为
    0001101
    指数:实际为4,必须加上127(转出的时候,减去127/1023),所以为131。也就是
    10000011
    符号:因为是正数,所以是0
    综上所述,17.625在内存中的存储格式是:01000001 10001101 00000000 00000000
    在Java中浮点数无法精确存放,除非使用BigDecimal
    float:4B:1.4E-45到3.4028235E38 保存7-8位有效数据
    double:8B:4.9E-324到1.7976931348623157E308 保存15-16位有效数据
    注意:浮点数无法精确存放
    表示方法:
    十进制数形式。由数字和小数点组成,且必须有小数点,如0.123, 1.23, 123.0
    科学计数法形式。如:123e3或123E-3,其中e或E之前必须有数字,且e或E后面的指数必须为整数
    f或者F表示float,而d或者D代表double。例如123f或者123.45D,系统默认为double类型
    double res = 0;
    for (int i = 0; i < 10; i++)
    res += 0.1;
    System.out.println(res); //0.9999999999999999
    double d = 0.1d;
    long l = Double.doubleToLongBits(d); //long类型和double类型都是64位的,他们的内存大小一
    样,这个函数的做法就是把double对应的内存结构复制到同样大小的long类型变量的内存结构中.返回这个long值
    System.out.println(t.getLongBits(l));
    Java精确计算问题
    关键字strictfp是strict float point的缩写,指的是精确浮点,它是用来确保浮点数运算的准确性。
    JVM在执行浮点数运算时,如果没有指定strictfp关键字,此时计算结果可能会不精确,而且计算
    结果在不同平台或厂商的虚拟机上会有不同的结果,导致意想不到的错误。而一旦使用了strictfp
    来声明一个类、接口或者方法,那么在所声明的范围内,Java编译器以及运行环境会完全依照IEEE
    二进制浮点数算术标准来执行,在这个关键字声明的范围内所有浮点数的计算都是精确的。
    需要注意的是,当一个类被strictfp修饰时,所有方法都会自动被strictfp修饰。因此,strictfp可以保证
    浮点数运算的精确性,而且在不同的硬件平台会有一致的运行结果。但是精确计算事实上还是没有得到保障,这是受到存储方式的限制。需要精确计算还是以来BigDecimal实现的。
    常见数学计算
    Java的Math类中包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。
    Math的方法都被定义为static 形式,通过Math类可以在主函数中直接调用。
    Math.sqrt()计算平方根
    Math.pow(a, b)计算a的b次方
    Math.max(a,b)计算最大值
    Math.min(a,b)计算最小值
    Math.abs()求绝对值
    Math.ceil天花板的意思,就是返回大的值;floor地板的意思,就是返回小的值;round 四舍五
    入,float时返回int值,double时返回long值
    random 取得一个大于或者等于0.0小于不等于1.0的随机数
    字符类型 char
    Java中存放字符采用的是Unicode编码字符集,2B,0-65535
    字符类型的变量可以当作整数使用
    char c=‘a’; 注意:这里使用的是单引号,不是双引号,单引号中只能包含一个字符
    需要记忆: ‘0’ < ‘A’ <‘a’
    Java也提供转义字符,以反斜杠(\)开头,将其后的字符转变为另外的含义
    int k=16; //如果不能执行计算,则返回NaN
    double res=Math.sqrt(k);
    System.out.println(res);
    double d1=-1234.567;
    System.out.println(Math.ceil(d1));//-1234.0
    System.out.println(Math.floor(d1));//-1235.0
    System.out.println(Math.round(d1)); //-1235 容易出错的位置
    d1=1234.567;
    System.out.println(Math.ceil(d1)); //1235.0
    System.out.println(Math.floor(d1));//1234.0
    System.out.println(Math.round(d1)); //1235
    基本使用
    布尔类型 boolean
    boolean数据类型有两种文字值:true真和false假
    在Java编程语言中boolean类型只允许使用boolean值,在整数类型和boolean类型之间无转换计算
    boolean类型被编译为int类型,等于是说JVM里占用字节和int完全一样,int是4个字节,于是
    boolean也是4字节
    boolean数组在Oracle的JVM中,编码为byte数组,每个boolean元素占用8位=1字节
    基本数据类型转换
    小转大自动转换
    大转小需要强制转换
    \ddd 1到3位8进制数所表示的字符(ddd) 例如’\110’实际就是字符H
    \uxxxx 1到4位16进制数所表示的字符(xxxx),例如’\u9110’表示字符’鄐’
    \’ 单引号字符,例如’‘’
    " 双引号字符,例如’“‘实际上是可以的,但是这样写可读性非常差,所以建议使用’”’
    \ 反斜杠字符
    char c=‘h’;
    System.out.println((int)c); //获取’h’字符对应的unicode编码值 104
    //GB2312
    System.out.println©;
    // c=‘ab’ 语法报错,因为只能对应一个字符
    //引入转移字符
    c=‘’‘;
    c=’\110’;
    System.out.println©;//H
    System.out.println((int)c);//72
    c=‘\u0050’;
    System.out.println©; //P
    System.out.println((int)c);//80
    byte b1=123;
    long k1=b1;
    double kk=k1;
    System.out.println(kk);
    long kk = 123456L;
    float ff=kk; //没有错误。float 4B long 8B
    double dd=123.567;
    long kk=(long)dd;
    System.out.println(kk);
    类型转换的语法:
    double
    复合数据类型
    复合数据类型包括:class类、interface接口、数组。
    null 索引在运行时并没有对应的类型,但它可以被转换为任何类型(不能是简单类型)。
    索引类型的默认值就是null
    常量
    常量就是指在程序执行期间其值不能发生变化的数据,常量是固定的。如整型常量123,实型常量
    1.23,字符常量’A’,布尔常量true等
    需求:要求用户键盘输入一个整数的半径值,计算园的面积
    int k=100;
    char cc=(char)k; //强制类型转换:窄化操作
    char k=‘d’;
    System.out.println((int)k);
    boolean bb=true;
    System.out.println((int)bb);//因为boolean类型和数值类型之间没有任何对应关系,所以这里的强
    转会报语法错误
    float f1=123.456;//语法报错,因为系统默认带小数点的数据为double类型,所以123.456是double
    类型的数据,而声明f1为float,所以这里需要进行数据类型转换或者进行特殊声明。如果浮点数转换为整数
    是直接截断小数部分。
    float f1=(float)123.456;
    float f1=123.456f; //数字末尾的f类似于数字末尾的L,用于进行数据类型的说明,f/F表示这是一个
    float类型的数据 d/D表示是一个double类型的数据
    Scanner sc = new Scanner(System.in);
    System.out.println(“请输入半径值:要求整数”);
    int r=0;//定义一个变量
    r=sc.nextInt();//会等待用户输入整数值,如果不正确则会有红色报错信息
    //计算园的面积
    double res=3.14
    rr; //Math.pow(r, 2)
    //输出计算结果
    System.out.println(“半径值为”+r+“的圆形面积为”+res);
    还需要计算周长
    但是客户提出需求变动,认为2位小数精度不足,需要进一步提升精度
    解决方案就是将2处的3.14修改为3.1415926
    新问题是:如果修改时漏改一处,则是一个隐藏的bug。引入常量以避免出现这样的问题。
    Scanner sc = new Scanner(System.in);
    System.out.println(“请输入半径值:要求整数”);
    int r=0;//定义一个变量
    r=sc.nextInt();//会等待用户输入整数值,如果不正确则会有红色报错信息
    //计算园的面积
    double res=3.14
    rr; //Math.pow(r, 2)
    //计算圆的周长
    double dd=3.14
    2r;
    //输出计算结果
    System.out.println(“半径值为”+r+“的圆形面积为”+res+“,对应周长为”+dd);
    public class Test1 {
    static final double PI=3.14159267989;//定义一个常量,这个值一旦赋值则不允许修改。常
    量的命名规则全大写,使用_分词
    public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println(“请输入半径值:要求整数”);
    int r=0;//定义一个变量
    r=sc.nextInt();//会等待用户输入整数值,如果不正确则会有红色报错信息
    //计算园的面积
    double res=PI
    rr; //Math.pow(r, 2)
    //计算圆的周长
    double dd=PI
    2r;
    //输出计算结果
    System.out.println(“半径值为”+r+“的圆形面积为”+res+“,对应周长为”+dd);
    }
    }
    如何接收键盘录入数据
    java.util.Scanner类常用于控制台的输入,当需要使用控制台输入时即可调用这个类。
    使用方法
    首先需要构造一个Scanner类的对象,并且与标准输入流System.in关联 Scanner sc = new
    Scanner(System.in);
    调用Scanner类对象sc的方法从输入流中获取你需要的输入
    说明:
    当创建了一个Scanner类对象之后,控制台会一直等待输入,直到敲回车键结束,把所输入的内容
    传给对象sc,若要获取需要的内容,调用sc的方法即可
    每次可以只输入一个数字,回车确认,例如123,只能被一个nextInt读取。
    也可以输入一组数字,例如123 456 789,每个数字之间用空格(一个或多个空格)隔开,可被多
    个nextInt()读取,空格及回车不会被读取。(注:输入数字中不能夹杂除数字、空格、回车之外的
    其他字符,否则会报错)
    如何在控制台输出数据
    表达式
    表达式就是运算符、操作数以及方法调用的序列,用来说明某个计算过程并返回计算结果. 按照运算符功
    能来分,基本的运算符分包括算术运算符、关系运算符、位运算符、条件运算符等
    算术运算符 +、-、
    、/、%、++、–
    关系运算符 >、<、>=、<=、、!=
    逻辑运算符 &&、 ||、 !。注意:逻辑计算支持短路操作
    位运算符 &、|、^、~、<< 、 >>、>>>。注意:为运算符不支持短路操作[考点]
    赋值运算符 =,+=,―=,=,/=
    三目条件运算符(?:)规则是完全一致的,使用的形式是: x ? y:z;
    算术运算符 +、-、
    、/、%、++、–
    Scanner sc=new Scanner(System.in);
    System.out.println(“请输入园的半径值:”); //用于提示用户录入数据
    int r=sc.nextInt(); //要求用户输入数据,否则阻塞等待用户输入
    System.out.println(“接受到的数据为”+r);
    System.out.println(数据);
    System.out.println(“请输入园的半径值:”);
    int kk=100;
    double res=3.14kkkk;
    System.out.println(“园的半径值为”+kk+“,对应面积为”+res);
    ±/
    整除:参与运算的双方都是整数 10/3=3而不是3.33333
    如果是10./3=3.333…这里由于10.是浮点数,则3会自动转换为大类型并参与计算,所以最终是10.0/3.0
    的计算结果
    计算次序为先乘除后加减,如果优先级一致,则自动从左向右进行计算 10+2
    5=20
    考核题目
    关系运算符 >、<、>=、<=、
    、!=
    用于判断两个数据之间的大小关系,计算结果为boolean,如果成立返回为true,否则为false
    /除法分母不能为0,否则出错
    % 求余(取模) 10%3=1实际就是10除以3求余数
    double k=10.12;
    System.out.println(k%3);
    输出:1.1199999999999992 应该返回值为1.12,由于浮点数不能精确存放,所以返回值是一个类似值
    double d1=-10.12;
    double res=d1%3;
    System.out.println(res);
    输出值为-1.1199999999999992 求余计算中符号位不参与计算
    ++和–是单目运算符
    i++等价于i=i+1,i–等价于i=i-1
    以++为例写法有2个:i++或者++i
    i++是先获取i的值,然后再对i加1
    int age=100;
    System.out.println(age++);输出为100
    System.out.println(age); 输出为101,因为上面进行加1
    ++i是先对i加1,然后再获取i的值
    int age=100;
    System.out.println(++age);输出101,先加1然后获取值
    System.out.println(age); 输出101
    public class Oper11 {
    public static void main(String[] args) {
    int k = 0;
    int res = k++ + k++ + k;
    System.out.println(res); //3
    int m = 0;
    res = ++m + m++ + m;
    System.out.println(res); //4
    }
    }
    double d1=10;
    System.out.println(d1>3); 返回true
    和=的区别:
    k=100;这是赋值运算符,意思是将=右边的计算结果储存在=左边的变量中
    k
    100这是比较计算符,意思是判断k是否值为100;如果是则返回true,否则false
    !=意思是判断是否不等于,表示如果相等时返回false,否则返回true
    k!=100不等于判定,如果k值为100则返回false,如果k值不是100则返回true
    浮点数的比较
    需求:
    用户输入身高和体重,计算对应的BMI指数值
    BMI指数(英文为Body Mass Index,简称BMI),是用体重千克数除以身高米数的平方得出的数字,是国际上常用的衡量人体胖瘦程度以及是否健康的一个标准
    按照我国标准,18.5-24.9kg/m2为正常,24-27.9kg/m2为超重,≥28kg/m^2为肥胖,而BMI<
    18.5kg/m^2为消瘦
    如何实现接受用户的键盘录入数据
    如何实现屏幕输出
    由于浮点数无法精确存放,所以判断k==1.0这个写法是错误的
    正确写法: a-b的绝对值小于1e-6
    Java提供了一个工具类Math,其中包含一个abs()的方法实现求绝对值
    Math.abs(d1-1)<1e-6 判断浮点类型的变量d1的值是否为1
    double res = 0;
    for(int i=0;i<10;i++)
    res=res+0.1;
    if(Math.abs(res-1)<1e-6) //|res-1|判断是否小于10的-6次方
    System.out.println(“计算结果为1”);
    else
    System.out.println(“计算结果不为1”);
    System.out.print(“请输入身高:”);
    Scanner sc = new Scanner(System.in);
    double height = sc.nextDouble();
    System.out.println(“请输入体重:”);
    double weight = sc.nextDouble();
    //算法的问题 BMI指数
    double bmi = weight / height / height;
    System.out.println(“您的bmi指数为:” + bmi);
    //建立一个变量指向键盘录入
    Scanner sc = new Scanner(System.in);
    //通过这个变量读取用户键盘录入的数据,如果用户不输入则一直等待,如果输入的数据不是浮点数,则报错
    double height=sc.nextDouble();
    变量sc中是Java提供的具体实现方法nextDouble实现从键盘读取一个浮点数,如果要求用户输入int,则方
    法为nextInt,。。。
    System.out.println(“具体需要输出的内容”);输出内容后会自动换行,如果不需要换行,则使用方法
    System.out.print(“”)
    System.out.println(“num:”+num);意思是输出【num:123】
    System.out.println(“num:num”)意思是输出【num:num】
    练习题:
    1、键盘录入升数,输出对应的加仑数
    2、键盘录入华氏温度,输出对应的摄氏温度值
    3、键盘录入公斤数,输出对应的磅数
    4、有5英亩的草地,一只羊每小时吃1.2平方米的草地的草,请计算多长时间可以吃完所有草地的草
    1加仑(美)=3.785 412升
    Scanner sc=new Scanner(System.in);
    System.out.print(“请输入升数:”);
    double d=sc.nextDouble();
    double g=d/3.785412;
    g=g*10000+0.5;
    g=(int)g/10000.;如果写成(int)g/10000结果一定是没有小数,因为参与运算的双方是整数,所以除法是
    整除运算
    System.out.println(d+“升等于”+g+“加仑”);
    C = 5×(F- 32)/9
    Scanner sc = new Scanner(System.in);
    System.out.println(“请输入华氏温度值:”);
    double f = sc.nextDouble();
    // C = 5×(F- 32)/9
    double cc = 5 * (f - 32) / 9;
    //额外要求:只输出整数
    System.out.println(“华氏” + (int) f + “等于摄氏” + (int) cc);
    1英亩 =4046.864798平方米
    1、将英亩转换为平方米
    2、平方米/1.2获取小时数
    3、将小数部分的小时值转换为分钟和秒
    int num = 5;
    double pfm = num * 4046.864798;
    double h = pfm / 1.2;
    int hour = (int) h;
    double n2 = (h - hour) * 60;
    int min = (int) n2;
    n2 = (n2 - min) * 60;
    int sec = (int) n2;
    sec = sec + 1;
    System.out.println(“吃完” + num + “英亩草地需要的时间为” + hour + “小时” + min + “分
    钟” + sec + “秒”);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java编程是一门应用广泛、易学难精的编程语言。要想从入门到精通,需要有一定的编程基础和长期的学习积累。 首先,入门阶段要学会基本的Java语法,了解面向对象编程的概念和应用,熟悉常用的Java类库和开发工具。可以通过看书、学习视频或参加培训等方式来进行学习。 其次,在中级阶段要深入学习Java的核心技术和各种实际应用。例如,掌握多线程编程、网络编程、数据库编程、Web开发等多个方面的技术,对代码的组织和编写要有较高的要求,能够实现复杂的程序逻辑以及与业务逻辑紧密相关的需求。 最后,进入高级阶段就要拥有扎实的编程基础、深入的架构设计能力和多年的实战经验。例如,可以研究Java虚拟机、性能调优、架构优化等领域的知识,并在多个大规模项目中实践和总结经验。 总之,要想成为Java编程的专家,需要不断地学习和实践,保持持续学习的勇气和热情,才能真正掌握这门技能并在实践中成长。 ### 回答2: Java编程是目前最流行的一种编程语言,其完美的跨平台性使其在计算机行业中具有广泛的应用。那么,如果想要从入门到精通,应该怎么学习呢? 1.初学者应该先掌握基础知识,如Java的概念、语法、变量、数据类型、条件语句、循环语句等。最好的学习方法是找一本简单易懂的Java入门书籍,按照书中的章节,一步一步地学习。 2.在掌握基础知识的基础上,要多写代码进行练习。可以找一些小项目来进行实践,提高自己的编程能力。 3.深入学习Java核心技术,如面向对象编程、多线程、网络编程等。这些技术是Java开发中必不可少的,学好这些技术,可以让你的编程能力更上一层楼。 4.熟练掌握一些常用的Java框架,如Spring、Hibernate等。Java框架可以让开发者更加高效地编写代码,提高开发效率。 5.参加Java开发社区,了解最新的技术趋势和最佳实践。与其他Java开发者交流,可以让你更深入地了解Java编程世界。 总的来说,Java编程入门到精通是一个不断学习和不断实践的过程。只有持续地学习和练习,才能逐渐掌握Java编程的精髓,并在实际开发中得心应手。 ### 回答3: Java编程是一门非常重要的编程语言,它在各个领域都有广泛的应用。从入门到精通的学习过程可以分为以下几个阶段。 1. 入门阶段:学习基本语法和编程概念 Java的基本语法相对来说比较简单,学习者只需要掌握基本的关键字、语法、数据类型、变量和运算符等基本概念即可。刚开始学习java编程,应该学习如下知识点: (1)面向对象编程概念 (2)数据类型、变量的声明和赋值 (3)运算符 (4)循环和条件语句 (5)方法的基本概念和调用 (6)基本输入输出 2. 进阶阶段:深入学习面向对象编程Java中,面向对象(OOP)是非常重要的概念。Java中的所有事物都是由对象构成的,因此必须深入了解面向对象编程概念。如下为进阶阶段的一些知识点: (1)类、对象和方法的介绍 (2)继承和多态 (3)接口和抽象类 (4)异常处理 (5)集合和泛型 3. 精通阶段:深入了解高级Java编程 从进阶阶段进入精通阶段,需要掌握Java编程高级特性,如网络编程、多线程编程以及三方库的使用,Java框架深入学习等知识点。如下为精通阶段的一些知识点: (1)网络编程、如socket编程、Http编程 (2)多线程编程 (3)Java Web编程,如Servlet、JSP、MVC框架等 (4)Java 数据库编程 (5)Java 安全编码 总之,Java编程入门到精通需要通过不断的实践和学习来不断提高,只有多多实践才能成为真正的Java编程高手。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值