余姚外贸网站建设,软件开发主要几个步骤,php网站开发是什么吗,做外贸在哪个网站比较好目录
Δ前言
一、拾枝杂谈 1.Java是什么#xff1f; 2.计组前瞻#xff1a; 3.JDK#xff0c;JRE#xff0c;JVM#xff1f;
二、环境搭建 1.JDK安装和配置#xff1a; 1.1 人话 1.2 JDK的配置 1.3 如何切换JDK的版本#xff1f; 2.DOS的简单使用#xff1a; 2.1 介…目录
Δ前言
一、拾枝杂谈 1.Java是什么 2.计组前瞻 3.JDKJREJVM
二、环境搭建 1.JDK安装和配置 1.1 人话 1.2 JDK的配置 1.3 如何切换JDK的版本 2.DOS的简单使用 2.1 介绍 2.2 常用的dos命令及演示 2.3 通过cmd命令运行Java程序演示 3.IDEA的详细使用教程 3.1 什么是IDE 3.2 什么是IDEA 3.3 IDEA入门指南
三、语法特性 1.代码规范 2.常量、变量、数据类型 2.1 常量 2.2 变量 2.3 数据类型 2.4 数据类型转换 3.标识符 3.1 简介 3.2 定义规则 3.3 命名规范 4.运算符 4.1 常见运算符及它们的优先级 4.2 单目运算符 4.3 算术运算符 4.4 位运算符特指位移运算符 4.5 关系运算符 4.6 位运算符指除了位移运算符之外的位运算符 4.7 逻辑运算符 4.8 三目运算符 / 三元运算符 4.9 赋值运算符 5.Scanner类的简单使用 5.1 概念 5.2 代码演示 6.Random类的简单使用 6.1 概念 6.2 代码演示
四、流程控制 1.顺序结构 2.选择结构 3.循环结构
五、方法 1.概念 2.格式 3.方法重载
六、数组 1.基本概念 2.定义格式 3.数组的访问 4.数组的遍历 5.数组的初始化 6.Java程序的内存分配 7.数组使用的两个常见问题 8.数组的扩容缩容插入元素插入元素查找元素 9.二维数组
Δ总结 Δ前言 up将JavaSE分为 Java基础 和 Java进阶 两部分—— 先说说Java基础Java基础又被up细分为六大专题①《面向对象之前需要掌握的知识》②《面向对象》③《API—常用类》④《API—常用工具》⑤《反射》⑥《多线程》无论你是通过什么渠道学习的Java也无论你学习Java是为了干啥初学者一定绕不开这六大专题。 再来说说Java进阶其实Java进阶这个专栏讲得还是JavaSE主要分为两部分一个是对常用集合类的源码解读例如HashMapLinkedList等还有一个就是初学者不太可能会用到的知识例如正则表达式网络编程再比如自定义异常内部类对象处理流元注解等知识前期基本不会用到等到了做项目、读源码、学框架的时候诶~要用到了。本篇博文要和大家分享的就是Java基础的第一个专题——《面向对象之前需要掌握的知识》主要内容包括但不限于JDK的配置和切换、Java数据类型、代码规范、数组等。注意事项——①代码中的注释也很重要②不要眼高手低自己跟着过一遍才真正有收获③点击文章的侧边栏目录或者文章开头的目录可以进行跳转。良工不示人以朴up所有文章都会适时补充完善。大家如果有问题都可以在评论区进行交流或者私信up。感谢阅读 一、拾枝杂谈 1.Java是什么 我们平时说的Java编程语言无一例外都是指JavaSEJava Standard Edition它最开始是由Sun公司的开发团队发明Sun公司创立于加利福尼亚的斯坦福大学——Stanford University这个开发团队后来推选了一个人出来作为他们的代表这个人就是大名鼎鼎的Java之父——James Gosling詹姆斯·高斯林也就是说Java之父其实是众多开发人员中的一个代表人物。 后来呢Sun公司就被Oracle公司收购了。所以现在Java语言的所有权掌握在Oracle公司手里我们在后面的学习中还会经常见到这个公司的名字。 那java语言有什么特点呢 1面向对象Object Oriented Programming即OOP。 2健壮Java是强类型机制的语言对比JavaScript是弱类型机制的语言且Java提供了“异常处理”“垃圾回收”等机制。 3跨平台性原因我们下面马上会是说到。 4半编译型半解释型语言或者说Java既具有编译型语言的特征也具有解释型语言的特征。具体内容up会在计组里说到 2.计组前瞻 up之后会出“计算机组成原理”相关的博文作为计算机基础四大件——“计算机学科专业基础”即408中的关键一环计组是每个学编程的人都逃不掉的。这里先简单给大家提一嘴计算机主要由Hardware硬件和Software软件两大部分组成——概念 Hardware指计算机中由电子、机械和光电元件等组成的各种物理装置的总称。 Software指按照特定顺序组织的计算机数据和指令的集合。 组成 Hardware根据经典的“冯·诺依曼”体系结构硬件有五大组成部分分别是——①运算器②控制器③存储器④输入设备⑤输出设备其中前两者为CPU的主要构成。 Software主要分为“系统软件”和“应用软件”两大类。系统软件比如黑窗口DOS以及操作系统像是WindowsLinuxUnixMacAndroid等应用软件就是我们平时称的那个“软件”了比如百度网盘淘宝Google浏览器等等。 3.JDKJREJVM 1. JDK Java Development Kit即Java开发工具包用于开发Java程序。 JDK JRE java的开发工具其中Java的开发工具包括 Java 编译器javac、Java 文档生成器javadoc、Java 反汇编器javap等等我们在后面的学习中会经常用到这些开发工具。 特别说明 ①一般我们说的“诶你Java用的哪个版本”说的都是JDK的版本目前主流版本有JDK8.0和JDK17.0两个版本。 ②Java程序开发和运行原理——示意图如下 2. JRE Java Runtime Environment即Java运行环境包含运行Java程序需要的组件用于运行Java程序。 JRE JVM Java的核心类库其中Java核心类库包括java.base模块最基础最重要的模块java.sql模块java.net.http模块等等。 3. JVM Java Virtual Machine即Java虚拟机。 JVM负责将Java程序翻成机器语言交给低层操作系统执行并保证运行效果JVM可以实现Java程序的跨平台性但JVM本身并不能跨平台。关于JVMup之后会专门出一个专栏讲解就放在《Java高级》专栏中。 Java的跨平台性是由于通过javac命令编译成的字节码文件可以在多个系统下运行。 二、环境搭建 1.JDK安装和配置 1.1 人话 上文我们说了Java的版本就是指JDK的版本这么看来JDK选择哪个版本对我们使用Java影响很大因为不同版本的JDK其核心类库以及语言特性都有不同程度的出入。 目前主流的版本是JDK8.0 和 JDK17.0这两个版本都是长期支持版也是用的最多的两个版本我的建议是两个版本你都下载上但是主要用JDK17.0可以随意切换JDK版本下文会有演示。 不过我想不会有人无聊到来Java基础教程里找JDK的下载安装教程你应该直接去找“JDK下载安装教程”因此下载和安装自己想办法up这里只给出JDK的配置教程以及当安装了多个JDK版本后如何切换当前使用的JDK版本。 1.2 JDK的配置 第一步首先右键点击我的电脑选择属性如下图所示 第二步接着在出现的设置页面上右侧选择高级系统设置如下图所示 第三步接着在出现的子菜单设置页面中选择环境变量如下图所示 第四步增加一条JAVA_HOME环境变量选择到JDK安装目录的下一级即可JDK所在的文件夹点进去那一级如下图所示 第五步也是最后一步配置Path变量具体操作如下图所示 选择编辑Path变量然后在Path变量中增加一条环境变量目录要选择到JDK的目录里面的bin目录的下一级亦可用图中所示下面那种方式即%JAVA_HOME%\bin默认指向当前JAVA_HOME路径所属的JDK的bin目录下一个道理如下图所示 然后点击“确定”就完事儿了。 1.3 如何切换JDK的版本 同时安装了两个JDK版本如何配置环境变量以达到切换JDK版本的效果 eg : 当前使用的JDK版本是Java8如下图所示 : 我们在cmd命令窗口下输入“java -version”命令也可以查看当前设备的JDK版本如下图所示 : 可知当前设备的JDK版本是JDK8.0现在up要将其切换到JDK17.0。 首先将JAVA_HOME环境变量更改为JDK17.0所在的目录如下图所示 : 然后配置path环境变量将配置的JDK17.0的path环境变量上移到JDK8.0的path环境变量之上那个%JAVA_HOME%\bin就是JDK8.0关联的环境变量如下图所示 : 此时若我们再次到cmd命令窗口下输入“java -version”命令注意——需要重新打开一个cmd窗口会发现JDK版本已经切换到了JDK17.0如下图所示 : PS如果想了解在IDEA中怎么切换当前项目使用的JDK版本可以移步“Spring IOC—基于注解控制和管理Bean”一文直接看“Resource自动装配”那里。 2.DOS的简单使用 2.1 介绍 DOSDisk Operating System磁盘操作系统。DOS原理图如下所示 2.2 常用的dos命令及演示 1 dir / (dir 路径)查看 当前目录 / 指定目录 有什么内容。 2 cd /D c: 切换到C盘下亦可选择切换到其他盘下例如cd /D d:切换到D盘下。 3 cd..切换到上一级。【PScd change directory】 4 cd\切换到根目录。 5 tree / (tree 路径)查看 当前目录 / 指定目录 下的所有子级目录。 6 cls清屏。 7 exit退出DOS。 8 echo xxx yyy.txt输入xxx内容到yyy文本文件中如果yyy文件不存在就创建它如果yyy文件存在就用xxx内容覆盖它原有的内容。 9 type nul xxx.txt创建一个空内容的名字叫xxx的文本文件。 很简单这里up只演示第一个其他真懒得演示了其他的大家自己动手去试试就学会了。 比方说up现在在D盘的用户目录下如下图所示 up通过在该目录路径栏输入“cmd”从当前目录进入DOS并通过dir 和 dir documents命令分别 从查看当前目录下和当前目录下的“文档”目录下都有什么文件演示GIF图如下所示 2.3 通过cmd命令运行Java程序演示 首先我们在桌面创建一个Test.java源文件如下图所示 Test.java代码如下
class Test {public static void main(String[] args) {System.out.println(This is only a temporary tentitive file~);}
} 现在我们要在DOS下完成两件事——①利用javac命令工具对Test.java编译生成Test.class文件②利用java命令工具运行Test.class。 先来干第一件事如下GIF图所示 可以看到Test.java成功被编译并在桌面上当前目录自动生成了Test.class字节码文件。 再来干第二件事如下GIF图所示 可以看到Test.class被正确执行并且成功打印出了This is only a temporary tentitive file~。 特别注意一点——在DOS下用cmd使用java命令工具时例如上面演示up用的“java Test”类名后面不能加.class否则会被误认为是类名的一部分造成运行错误如下图所示 3.IDEA的详细使用教程 3.1 什么是IDE IDE全称Integrated Development Environment即“集成开发环境”是指整合了代码的编写、运行、分析、调试等一系列功能的开发软件确切地说它是一个为开发者提供综合工具集的平台核心目标是简化开发流程将编写、调试、测试和部署代码的工具集成到一个统一的界面中。 3.2 什么是IDEA 目前主流的运行Java程序的IDE有两个——①IDEA②Eclipse。前者智能程度高、功能全面后者免费。 大多数Java程序员使用的IDE包括企业员工都是IDEA因为好用Eclipse更可能是学校用比如考研复试里面有机试的时候。那IDEA呢是由Jet Brains公司开发的在捷克首都卖得还挺贵咳咳但是我们一般是用那啥版本的。 3.3 IDEA入门指南 具体见这篇博文——链接如下 https://blog.csdn.net/TYRA9/article/details/128360218文章浏览阅读3.8k次点赞13次收藏40次。IDEA新人入门指南手把手带你创建第一个项目Lets go!_idea使用教程javahttps://blog.csdn.net/TYRA9/article/details/128360218https://blog.csdn.net/TYRA9/article/details/128360218https://blog.csdn.net/TYRA9/article/details/128360218https://blog.csdn.net/TYRA9/article/details/128360218https://blog.csdn.net/TYRA9/article/details/128360218https://blog.csdn.net/TYRA9/article/details/128360218https://blog.csdn.net/TYRA9/article/details/128360218https://blog.csdn.net/TYRA9/article/details/128360218https://blog.csdn.net/TYRA9/article/details/128360218https://blog.csdn.net/TYRA9/article/details/128360218https://blog.csdn.net/TYRA9/article/details/128360218 “IDEA详细入门指南”一文主要内容包括 : ① 项目和类的创建 ② 如何运行一个程序 ③ IDEA中包的使用 ④ IDEA中常用的20个快捷键 ⑤ IDEA中语句模板的使用 三、语法特性 1.代码规范 1类、方法的注释要以javadoc的方式来写注释内容可以被JDK提供的工具javadoc所解析生成一套以网页文件形式体现的该程序的说明文档。 2非javadoc的注释往往是给代码的维护者看的着重告诉读者为什么这样写如何修改注意什么问题等。 3代码排版缩进时先选中要排版的代码再用Tab 或 Shift Tab进行缩进。 4源文件要使用UTF-8编码。 5行宽度不要超过80个字符。 6代码编写风格——选择次行风格 或 行尾风格IDEA默认风格 PS常见javadoc注释符如下表所示
标签描述示例author标识一个类的作者author John Doedeprecated指名一个过期的类或成员deprecated This method is no longer supported.{docRoot}指明当前文档根目录的路径{docRoot}/images/logo.pngexception标志一个类抛出的异常exception IOException On input error.{inheritDoc}从直接父类继承的注释{inheritDoc}{link}插入一个到另一个主题的链接{link java.util.List}{linkplain}插入一个到另一个主题的链接但该链接显示纯文本字体{linkplain java.util.List List}param说明一个方法的参数param username The name of the user.return说明返回值类型return The number of users.see指定一个到另一个主题的链接see java.util.Collectionsserial说明一个序列化属性serial descriptionserialData说明通过 writeObject() 和 writeExternal() 方法写的数据serialData descriptionserialField说明一个 ObjectStreamField 组件serialField name type descriptionsince标记当引入一个特定的变化时since 1.5throws和 exception 标签一样标志一个类抛出的异常throws IOException On input error.{value}显示常量的值该常量必须是 static 属性{value java.lang.Math#PI}version指定类的版本version 1.0 2.常量、变量、数据类型 2.1 常量 概念是指在程序执行的过程中其值不可以发生改变的量。分类大体上分为两大类——“字面值常量” 和 “自定义常量”。其中字面值常量是指直接写在代码中的固定值它又可分为六种①字符串常量如HELLO WORLD②整数常量如11-23③小数常量如2.333④字符常量如R, A, 9⑤布尔常量如truefalse⑥空常量即null。而自定义常量则是由final修饰的变量通过final关键字来定义。补充在Java中整型常量默认是int类型声明long类型常量必须在后面加“l” 或 “L”。 ConstantDemo类代码如下
package csdn.foundation.before_info.initial;public class ConstantDemo {/*** 补充两个快捷方式* ①main方法的快捷键psvm(public static void main(String[] args){}* ②输出语句的快捷键sout(System.out.println();)*//*常量在程序的运行过程中其值不会改变的量。字面值常量分类Ⅰ字符串常量要用双引号括起来。eg“abc”Ⅱ字符常量 要用单引号括起来。eg‘A’,0Ⅲ整数常量11,23Ⅳ小数常量11.23Ⅴ布尔常量值只有两个true 和 falseⅥ空常量NULLnull*/public static void main(String[] args) {//演示//Ⅰ字符串常量System.out.println(abc);System.out.println(123);//此时的123是一个字符串常量。//Ⅱ字符常量System.out.println(A);System.out.println(0);//Ⅲ整数常量System.out.println(11);System.out.println(23);//Ⅳ小数常量System.out.println(8.24);//注意整数常量和小数常量直接在括号里写就行。//Ⅴ布尔常量System.out.println(true);System.out.println(false);}
}运行结果 2.2 变量 变量三要素①数据类型②变量名③变量初始值。变量的定义数据类型 变量名 初始值。补充在Java中局部变量在定义时必须初始化如果局部变量未被使用则可以不初始化而成员变量则有自己的默认值。 VariableDemo类代码如下
package csdn.foundation.before_info.initial;public class VariableDemo {public static void main(String[] args) {//定义变量记录学生个数。//变量的定义格式 数据类型 变量名 初始化值。int stu_number 12;System.out.println(stu_number);//输出语句此处直接写变量名即可。}
}运行结果 2.3 数据类型 分类基本数据类型 和 引用数据类型。基本数据类型分类①整数型byte, short, int, long②浮点型float单精度, double双精度[整数型和浮点型又可统称为数值类数据类型] ③字符型char④布尔型即布尔类型boolean。Java中一共有八种基本数据类型。引用数据类型分类①类class[String就属于这块儿]②接口interface③数组。Java中一共有三种引用数据类型。八种 基本数据类型如下表所示 PS1对于boolean类型不可以用0 或 非0来代替false 和 true与C语言不同即boolean类型的取值范围只能是true 和 false。 PS2浮点数尽量用 double 类型存储而不是 float。 DataTypesDemo类代码如下
package csdn.foundation.before_info.initial;/*变量的定义形式数据类型 变量名 初始化值八种基本数据类型byteshortintlongfloatdoublecharboolean定义变量的注意事项1.整形默认是int类型定义long类型变量的时候后边要加字母l(L)2.浮点型默认是double类型定义float类型变量的时候后边要加字母f(F)!!!使用变量的注意事项:1.变量未赋值不能使用局部变量。2.变量只在它所属的范围内有效即变量的作用域3.一行上可以定义多个变量但是不建议这样写。*/
public class DataTypesDemo {public static void main(String[] args) {//byte类型的变量byte b 11;System.out.println(b);//short类型的变量short s 4;System.out.println(s);//int类型的变量int i 24;System.out.println(i);//long类型的变量long l 10000L;System.out.println(l);//float类型的变量float f 11.23F;System.out.println(f);//double类型的变量double d 66.6;System.out.println(d);//char类型的变量char ch K;System.out.println(ch);//boolean类型的变量boolean b1 true;boolean b2 false;System.out.println(b1);System.out.println(b2);System.out.println(--------------------------------);int a;a 11;System.out.println(a);//代码块大括号括起来的内容就是代码块。{int aa 20;System.out.println(aa);}//变量只在它所属的代码块内有效。方法与代码块之间空一行。}
}运行结果 2.4 数据类型转换 分类①自动隐式类型转换“小类型 → 大类型”自动提升为大类型运算结果也是大类型。②强制显式类型转换手动将大类型转换成小类型运算结果是小类型转换格式——“小类型 变量名 (小类型) 大类型数据;”。注意事项当且仅当大类型数据可以转换为小类型数据时才能进行强制类型转换否则会造成精度丢失。补充 int 转 float 虽然是小类型转大类型但可能丢失精度因为根据IEEE754标准 float 的尾数部分只有 24 位有效位含1位隐藏位而 int 需要 32 位表示。如果需要更高的精度可以使用 double 类型64 位浮点数尾数部分有 53 位有效位但即便如此double 也无法精确表示所有 long 类型的值。PS具体细节up将在《计算机组成原理》专栏详细解释。byte,short 和 char之间 不会发生 相互自动转换。byte, short, char参与运算时结果自动转换为int类型。当把数值类变量赋值给byte时先判断该数是否在byte范围内是就可以赋值。在Java中boolean类型不参与数据类型转换。“表达式” 结果的类型自动提升为所操作的数据中最大的类型。 ConversionDemo类代码如下
package csdn.foundation.before_info.initial;/*类型转换1) 隐式类型转换 小 --- 大数据类型的范围从小到大如下byteshortchar - int(默认的整形) - long - float - double(默认的浮点型)Boolean类型不参与比较它的值只有true和false两个。2) 强制类型转换 大 --- 小目标类型 变量名 (目标类型) 要转换的值注意 强制类型转换在使用的时候可能会出现丢失精度的问题*/public class ConversionDemo {public static void main(String[] args) {//定义两个int类型的变量int a 10;int b 11;System.out.println(a b);//我可以把ab的结果接收一下。int c a b;System.out.println(c);System.out.println(_____________________________ );//定义一个int类型的数据 和 一个byte类型的数据int aa 10;byte bb 20;System.out.println(aa bb);/**byte cc aa bb;//会报错因为byte类型和int类型计算会先将byte类型提升为int类型再计算结果也是int类型。*/int cc aa bb;//即隐式类型转换。System.out.println(cc);System.out.println(______________________________);//思考如何使用byte类型的变量来接收aa bb?byte dd (byte) (aa bb);System.out.println(dd); //答: 强制类型转换.System.out.println(______________________________);double d1 3.14;int a1 (int) d1;//此条代码的意义是将double类型的结果值强制类型转换为整数.System.out.println(a1);}
}运行结果 3.标识符 3.1 简介 标识符定义给类、方法、变量、常量等起名字的字符序列就是标识符标识符的组成部分英文大小写字母、数字、下划线_ 和 美元符号$ 3.2 定义规则 不能以数字开头不能是关键字 和 保留字但可以包含严格区分大小写 PS_1 常用关键字如下—— 1用于定义数据类型的关键字
关键字描述class定义类interface定义接口enum定义枚举类型interface定义注解类型byte字节类型short短整型int整型long长整型char字符类型float单精度浮点型double双精度浮点型boolean布尔类型void无返回值类型true布尔值真false布尔值假null空引用 2用于定义流程控制的关键字
关键字描述if条件判断else条件分支switch多分支选择caseswitch 分支defaultswitch 默认分支for循环while循环do循环do-while循环break跳出循环或 switchcontinue继续下一次循环return返回值 3用于定义访问权限修饰符的关键字
关键字描述public公共访问权限protected受保护的访问权限private私有访问权限 4用于定义类、函数、变量修饰符的关键字
关键字描述abstract抽象类或方法final不可继承或不可修改static静态成员synchronized同步方法或代码块 5用于定义类与类之间关系的关键字
关键字描述extends继承类implements实现接口 6用于定义建立实例、引用实例、判断实例的关键字
关键字描述new创建实例this当前对象引用super父类对象引用instanceof判断对象类型 7用于处理异常的关键字
关键字描述try尝试执行代码块catch捕获异常finally最终执行代码块throw抛出异常throws声明可能抛出的异常 8用于包的关键字
关键字描述package定义包import导入包 9其它关键字
关键字描述native本地方法strictfp严格浮点计算transient非序列化字段volatile易变字段assert断言 10自己命名时要避免使用的保留字
保留字描述byValue目前未使用可能用于未来的语言特性。cast目前未使用可能与类型转换相关。future目前未使用可能用于未来的语言特性。generic目前未使用可能与泛型相关。inner目前未使用可能与内部类相关。operator目前未使用可能与操作符重载相关。outer目前未使用可能与外部类相关。test目前未使用可能与测试相关。var从 Java 10 开始var 被用作局部变量类型推断的关键字但在早期版本中是保留字。goto保留字但 Java 中未实现 goto 语句为了避免代码混乱。const保留字但 Java 中使用 final 代替 const 来定义常量。 3.3 命名规范 类和接口首字母大写如果有多个单词每个单词首字母大写大驼峰egHashMapOutputStreamWriter。变量和方法首字母小写如果有多个单词从第二个单词开始首字母大写小驼峰eggetNametoString。自定义常量所有字母全部大写多个单词之间用下划线_隔开egMAX_SIZEMIN_VALUE。包名全部小写如果有多级包则包名之间用点号.隔开遵循域名反写的格式com.cyan.pot。总结驼峰命名见名知意。 4.运算符 4.1 常见运算符及它们的优先级 单目运算符 算术运算符 位运算符特指位移运算符 关系运算符 位运算符指除了位移运算符之外的位运算符 逻辑运算符 三目运算符 赋值运算符 4.2 单目运算符 分类自增--自减!逻辑非~按位取反PS偶数个逻辑非!不改变真值的结果eg(!!true) true(!!!!false) false。 4.3 算术运算符 分类加-减*乘/除%取模加法运算的特点 ① 加法两边是数值型数据时进行加法运算 ② 加法两边出现字符型数据参与运算时ega, o等字符用该字符在计算机中所表示的数值进行运算。byte, short, char参与运算时结果自动转换为int类型 ③ 加号两边有任意一边是字符串时进行字符串的拼接操作。PS华氏温度转摄氏温度的公式摄氏温度 (5 / 9) * (华氏温度 - 100)。 4.4 位运算符特指位移运算符 算术左移算术右移逻辑右移 4.5 关系运算符 定义关系运算符是用来描述两个变量值之间的关系的。分类大于小于大于等于小于等于等于!不等于。 4.6 位运算符指除了位移运算符之外的位运算符 ① 按位与注意与短路与作区分。当进行位运算时表示把左右两个数的二进制代码的每一位都进行”与“操作算出组成的新的二进制代码所对应的数。还可以作为信息的采集方式比如 通过 “a 0101”就能判断出a的第一位和第三位。 ② |按位或注意与||短路或作区分。 ③^按位异或不允许相同相同为0不同为1。 4.7 逻辑运算符 使用逻辑运算符两端一般连接值为布尔类型的关系表达式。分类逻辑与|逻辑或短路与||短路或。特别注意——当 或 | 两边不是booloean类型时表示位运算。逻辑与 和 短路与 的区别—— 短路与如果第一个条件为false则第二个条件不会进行判断最终结果直接为false效率高。 逻辑与不管第一个条件是否为false第二个条件都要进行判断效率低。逻辑或| 和 短路或|| 的区别——同理。 4.8 三目运算符 / 三元运算符 a ? b : c —— 如果 a 成立就执行b否则执行c。 4.9 赋值运算符 分类①基本赋值运算符②扩展赋值运算符复合赋值运算符-/*%。扩展赋值运算符的好处省略了强制类型转化。 short s 1;
//s s 1; //报错: 不能把int类型赋值给short类型
s 1; //没事儿相当于s (short) (s 1); 5.Scanner类的简单使用 5.1 概念 扫描器即可以通过Scanner类扫描用户在控制台录入的数据。 5.2 代码演示 ScannerDemo类代码如下
package csdn.foundation.before_info.scanner.extendclass;
// 1.导包
import java.util.Scanner;public class ScannerDemo {public static void main(String[] args) {// 2.创建Scanner类的对象// System.in标准的输入流默认指向键盘。(编译类型为InputStream)boolean key true;Scanner sc new Scanner(System.in); //根据Scanner类的构造方法需要传入一个指定输入流。// 3.接收数据System.out.println(请输入一个实数);//为了防止InputMismatchException异常需要先对f进行判断loop: while (key) {if (sc.hasNextFloat()) {float f sc.nextFloat();sc.nextLine(); //nextLine用于“消化”掉Enter键的/n换行符System.out.println(f: f);key false;} elsebreak loop;}//接收字符串类型的数据System.out.println(请输入一个字符串);//方法一:String s sc.nextLine(); //结束标志回车System.out.println(s s);//方法二:/*String s sc.next(); //结束标志空白符(回车Tab键空格) eg空格后的字符都不会计入System.out.println(s s);*/// 4. 关闭扫描器sc.close();}
}运行结果如下GIF图所示 6.Random类的简单使用 6.1 概念 随机数用于产生随机数的类。 6.2 代码演示 RandomDemoEX类代码如下
package csdn.foundation.before_info.Random;
/**猜数字的小游戏系统产生一个1~100之间的随机数请猜出这个数是多少。*/
import java.util.Random;
import java.util.Scanner;
//记得导包public class RandomDemoEX {public static void main(String[] args) {//1.获取一个1~100之间的随机数让用户猜。Random r new Random();Scanner sc new Scanner(System.in);int num r.nextInt(100) 1;/*0~100前闭后开区间 1, 就能取到100. 即[1,101)r.nextInt(99) -- [0,99)*/for ( ; ; ) {//2.通过键盘录入获取用户猜的数字并接收。System.out.println(请猜一下1~100间的这个整数是多少:);int t sc.nextInt();//3.比较两个数字大小看是否一致并给予提示。if (t num)System.out.println(猜小了哥们);else if (t num)System.out.println(猜大了哥们);else {System.out.println(恭喜哥们可算混对了);break;}}//4.因为不知道你啥时候猜对所以用死循环。sc.close();}
}
//PS:猜数字技巧折半法。 运行结果如下GIF图 四、流程控制 1.顺序结构 Java中定义变量时应采用合法的前向引用即先定义后使用。写程序的时候做数据测试应该测试以下几种情况—— ① 正确数据。 ② 错误数据。 ③ 边界数据。读程序的时候应该遵循以下步骤—— ① 程序的整体执行流程。 ② 每条语句的具体含义。 ③ 试数代入一个数据过一遍。 2.选择结构 在用法上选择结构与C语言类似。在Java中switch (表达式) 表达式的取值类型可以是①byte; ②short; ③int; ④char JDK5开始还可以是 ⑤枚举 JDK7开始还可以是 ⑥String。 PS对于switch语句表达式的数据类型应和case后的常量类型一致或者是“可以自动转换成的能够相互比较的类型”eg表达式是char类型而case后常量的类型是int类型。多分支 if条件语句 可以没有 单else语句。建议实际开发中分支语句的嵌套不要超过三层。switch分支 和 if分支应该用谁 若需要判断的是具体数值且值的数目不多离散的值而且值的类型符合switch表达式的六种类型更推荐用switch分支。 若要对一个或多个连续的区间进行判断更推荐if分支 3.循环结构 for循环语句的格式 for (初始条件语句; 判断条件语句; 控制语句) {//循环体——重复执行的代码
} ①初始条件语句——用于循环变量的初始化。用一个Java的赋值语句来完成eg: int i 1; PSfor循环中初始条件语句可以有多条语句但要求变量的数据类型相同多条初始语句之间用逗号隔开。 ②判断条件语句——判断本次循环是否执行往往优先采用小于号返回一个布尔值。 ③控制语句——用于控制循环执行的次数 或 循环的执行特性。PS控制语句也可以有多条中间照样用逗号隔开。 while 循环相比于for循环初始条件语句 和 控制语句可以省略。 do-while循环要点与C语言相同do-while循环至少执行一次记得最后的while()后要加;分号。 for循环 和 while循环应该用哪个 一般来说for循环和while循环可以互相改写但while循环格式更加简洁for循环更倾向于循环次数是固定的而while循环更倾向于循环次数不固定的情况。 死循环代码如下 //1. for循环版本的死循环
for ( ; ; ) {//循环体根据实际需求给出结束循环的条件。
}//2. while循环版本的死循环
while (true) {//循环体根据实际需求给出结束循环的条件。
} 演示一下循环结构Orange类代码如下
package csdn.foundation.before_info.control;/*** 1024程序员节给可爱的程序员发橙子* 已知条件* 1.假设有三个班级每个班级有十五位码农现在要将100个橙子分别发给每位码农且每人只能拿一个橙子。* 2.假设编号中有5的哥们不吃橙子* 3.如果当前编号的码农已经有了橙子则不再给该码农发放橙子若橙子发完了则活动结束。*/
public class Orange {public static void main(String[] args) {int count 0; //count变量用于记录已经发放的橘子的个数。firstFor: //带标号的循环for (int i 1; i 3; i) {secondFor:for (int j 1; j 15; j) {if (j % 10 5 || j / 10 % 10 5) {continue secondFor; //跳过当前码农直接进行下一次循环(内层循环)}System.out.println(正在给第 i 个班的第 j 个哥们发橘子 哥们吃的挺香);count;if (count 100)break firstFor;}System.out.println();}System.out.println(总共发放了 count 个橘子);}
}运行结果 五、方法 1.概念 也叫函数是完成特定功能的代码块。 2.格式 修饰符 返回值类型 方法名(形参列表) { //方法体语句; return 返回值; // Java中方法的返回值必须和函数名前等等返回值类型相同。 } 注意事项—— ① 参数类型可以是基本类型也可以是引用类型 。 ② 方法必须定义在类中方法之间 是平级关系方法不能嵌套定义。 ③ 当方法的返回值类型为void时return语句可以省略。 3.方法重载 定义同一个类中的多个方法方法名相同但形参列表不同这样的情况称为”方法重载“。对于重载的多个方法可以通过方法签名方法名 形参列表准确地找到具体方法。为什么需要方法重载 当实现的功能相同但具体的实现方式不同时我们可以通过定义名称相同而形参列表条件不同的多个方法来更好地识别和管理类中的方法。 演示一下方法重载ReMethodDemo类代码如下
package csdn.foundation.before_info.method_test;/*** 方法重载的概念* 同一个类中的多个方法出现方法名相同但是参数列表不相同的情况。* 参数列表不同有以下情况(有一个不同就可以) //注意和形参的名字无关系* I.个数不同* II.对应数据类型不同* III.相同数据类型但位置不同* Δ方法重载与方法的返回值类型无关, 与方法的修饰符无关。*/
public class ReMethodDemo {public static void main(String[] args) {int a1 3,b1 5;long a2 8L,b2 11L;float a3 2.11F,b3 9.85F;//小数默认double类型想定义float类型需要后面加上一个F。System.out.println(int类型中较大的数字是 compare(a1, b1));System.out.println(long类型中较大的数字是 compare(a2, b2));System.out.println(float类型中较大的数字是 compare(a3, b3));}public static int compare (int a, int b) {return (a b)?a :b;}public static long compare (long a, long b) {return (a b)?a :b;}public static float compare (float a, float b) {return (a b)?a :b;}public static void compare (int a, float c) {;}
}运行结果 六、数组 1.基本概念 数组是用来存储同一种数据类型的多个元素的容器此处提到的”数据类型“可以是基本类型也可以是引用类型但不能混用。 2.定义格式 格式一 数据类型[] 数组名 new 数据类型[长度]; (new关键字用于开辟内存空间数组长度在定义时指定不可更改)格式二 数据类型[] 数组名 new 数据类型[] {元素1元素2...}; 定义时元素是确定的避免了内存空间的浪费格式三 数据类型[] 数组名 {元素1元素2元素3...}; 格式三是格式二的变形简化了代码编写 ArrayDemo1类代码如下
package csdn.foundation.before_info.array0;/*** PS : 1) 数据类型[] 数组名 数据类型 数组名[]* 两种方式都可以。* 2) 也可以先声明数组后分配空间* egint[] aaa; //此处数组实际为null* a new int[3];**/public class ArrayDemo1 {public static void main(String[] args) {
// eg:注意格式正确int[] a1 new int[5]; //格式1int[] a2 new int[]{1, 2, 3, 4}; //格式2int[] a3 {1, 2, 3, 4, 5}; //格式3System.out.println(-------------------------------);//C中是这样的 int a[] {1,2}; 有点类似于Java中的格式三//数据类型[] 数组名 数据类型 数组名[]int aa1[] new int[3];int aa2[] new int[]{1,2,3,4};int aa3[] {1, 2, 3, 4, 5};System.out.println(aa1);//Define a char Array to store 26 English alphabet.char[] alphabets new char[26];int i 0;for ( ; i alphabets.length; ) {alphabets[i] (char) (A i);i;}//print alphabetsfor (int j 0; j alphabets.length; j) {System.out.print(alphabets[j] );}}
}运行结果 3.数组的访问 通过 索引也叫下标、脚标来访问数组下标是指数组元素距数组起始位置的偏移量第一个元素的偏移量为0所以数组的下标从0开始。访问格式数组名[索引] or 数组名[索引] 值。若直接手动输出数组变量名得到的是数组的内地址值。如下图所示 Java中数组中未手动赋值的元素有默认值egint类型数组默认值是0double类型数组默认值是0.0。 4.数组的遍历 通过for循环遍历数组打印数组中每个元素的值。 PS数组变量存储的是数组在堆内存中的地址值而不是数组元素的值数组变量通过内存地址引用堆内存中的数组所以数组是引用类型。 演示类ArrayDemo5代码如下
package csdn.foundation.before_info.array0;import java.util.Scanner;/*** 在Java中定义一个方法来遍历数组时只需要将数组名发送给方法即可* 由于java在内部已经写好了代码所以方法能够自己找到数组的长度。*/
public class ArrayDemo5 {public static void main(String[] args) {Scanner sc new Scanner(System.in);int[] arr new int[5];System.out.println(请输入数组的元素5个整数);for (int i 0; i arr.length; i) {arr[i] sc.nextInt();}System.out.println(_______________________);System.out.println(数组遍历的结果为);printArray(arr);sc.close();int[] arr2 new int[5];for (int i 0; i arr2.length; i) {arr2[i] arr[i];System.out.println(拷贝后的arr2中的第 (i 1) 个元素是 arr2[i]);}}public static void printArray(int[] arr) {for (int a 0; a arr.length; a) {System.out.println(arr[a]);}}
} 运行结果 5.数组的初始化 动态初始化只指定长度由系统给出默认值。定义格式一 整数型byte, short, int, long0浮点型floatdouble0.0字符型char\u0000空字符布尔型booleanfalse引用类型null空引用 静态初始化给出初始化值由系统决定数组长度。定义格式二、三 6.Java程序的内存分配 方法区存储可运行的class文件字节码文件包含方法静态成员常量等。包含方法的类会被逐个加载到方法区其中首先加载的是包含main方法的类。栈方法运行时使用的内存特点是“后进先出”即最先进入栈区的方法最后出栈比如main方法。堆存储new出来的数组或对象。本地方法栈JVM在调用操作系统功能时使用与开发无关。寄存器CPU使用与开发无关。 PS关于“Java程序的内存分配”我们会在《面向对象》专题也就是下一个专题更详细地讲解。有兴趣的同志可以先去看看up写得这两篇博文—— ①创建对象的内存图解java 创建对象的内存图解 通俗易懂)_java创建对象内存分配图解-CSDN博客 ②继承关系的内存图解java 继承关系的内存图解 通俗易懂)_java继承的内存模型-CSDN博客 7.数组使用的两个常见问题 数组索引越界异常ArrayIndexOutOfBoundsException即下标越界。空指针异常NullPointerException数组引用存储的值为null而非数组的地址。 arrr1 null;
System.out.println(arr1[2]); //运行时报错——java.lang.NullPointerException 8.数组的扩容缩容插入元素插入元素查找元素 链接如下 java 数组的扩容缩容插入元素查找元素 详解通俗易懂_java 数组扩容-CSDN博客Java数组的扩容和缩容是一种常见的操作。扩容是指增加数组的容量以容纳更多的元素缩容则相反。本文详细介绍了扩容和缩容的需求、思路和代码演示并附上了运行效果。https://blog.csdn.net/TYRA9/article/details/128262798https://blog.csdn.net/TYRA9/article/details/128262798https://blog.csdn.net/TYRA9/article/details/128262798 9.二维数组 ArrayEX类代码如下
package csdn.foundation.before_info.array0;import java.util.Arrays;
import java.util.Scanner;/*关于二维数组的声明(一共三种)除了像一维数组一样的int[][] twoDiArray 和 int twoDiArray[][] 之外还有int[] twoDiArray[] */
public class ArrayEX {public static void main(String []args) {int[][] twoDimensionalArray {{0, 0, 0, 0, 0, 0},{0, 0, 1, 0, 0, 0},{0, 2, 0, 3, 0, 0},{0, 0, 0, 0, 0, 0},};System.out.println(The length of twoDimensionalArray is : twoDimensionalArray.length);System.out.println(The length of twoDimensionalArrays element is : twoDimensionalArray[0].length);System.out.println(--------------------------------------);//traverse the two-dimension arrayfor (int i 0; i twoDimensionalArray.length; i) {for (int j 0; j twoDimensionalArray[0].length; j) {System.out.printf(%-5d, twoDimensionalArray[i][j]);}System.out.println();}System.out.println(--------------------------------------);for (int i 0; i twoDimensionalArray.length; i) {System.out.println(Arrays.toString(twoDimensionalArray[i]));}System.out.println(--------------------------------------);System.out.println(Arrays.toString(twoDimensionalArray));System.out.println(--------------------------------------);//Die Demo_two Live Second.Scanner sc new Scanner(System.in);int rowNum;rowNum sc.nextInt();int[][] tDA new int[rowNum][];/*Assignment.print every oneDimensionalArray of twoDimensionalArray.*/for (int i 0; i tDA.length; i) {tDA[i] new int[i 1];for (int j 0; j tDA[i].length; j) {tDA[i][j] i 1;System.out.print(tDA[i][j] \t);}System.out.println();}sc.close();}
}/*** Actually,the length of twoDimensionalArrays element is uncertain.* It means that the column number of twoDimensionalArray is not decided.* eg:* int[][] twoDimensionalArray;* twoDimensionalArray new int[5][]; //Dont have to write the width.* 并且如果没有给一维数组开空间那么twoDimensionalArray[i] null;*/运行结果 Δ总结 以上就是我们专题一 ——《面向对象之前需要掌握的知识》的全部内容了。感谢阅读回顾我们的第一个专题我们先是从“JDKJREJVM”的关系出发又引出了DOSIDEA接着介绍了Java的一些语法特性Java的流程控制最后又给出了Java的方法和数组的内容所有内容都相对比较简单比较容易上手。嗯总的来说对于这一专题的内容大家不需要太上心啥时候忘了回来看看就行第一个专题就像是安全村溜达溜达下一专题开始才是真正的主线。下一专题——《面向对象》大家不见不散。 System.out.println(END--------------------------------);