做产品代理上哪个网站好,微信显示个人网站,短视频制作软件app,深圳市建设(集团)有限公司是国企吗如果你不懂Java 并且想认真学习接触了解一下Java的语法#xff0c;建议把这篇文章收藏了#xff0c;多看几遍#xff0c;应该可以初步掌握Java 大部分基础的语法 。
让我们出发吧#xff01;ps:本文有点长#xff0c;耐心阅读 。 〇#xff0c;编程环境
工程项目推荐使…如果你不懂Java 并且想认真学习接触了解一下Java的语法建议把这篇文章收藏了多看几遍应该可以初步掌握Java 大部分基础的语法 。让我们出发吧ps:本文有点长耐心阅读 。〇编程环境工程项目推荐使用IDEA.入门学习推荐使用jupyter .notebook的java插件 IJava 的方法如下:1,下载Java JDK 9.建议122,下载ijava-1.3.0.zip,并解压。3,进入解压后目录运行 python3 install.py --sys-prefix。详情参见https://github.com/SpencerPark/IJava也可以在以下网页链接中直接尝试IJavahttps://mybinder.org/v2/gh/SpencerPark/ijava-binder/master一算数运算篇幅限制下面就只能给大家展示小册部分内容了。整理了一份Java零基础学习笔记包括了Java基础、Javaweb、Java框架、后端中间件、Java微服务、计算机基础、算法、springcloud、Java虚拟机、spring源码、redis、MySQL、并发编程、微服务、需要全套Java零基础进阶路线笔记【点击此处即可/免费获取】https://docs.qq.com/doc/DQUFvdURDeVF3UUpz?no_promotion1is_blank_or_templateblank二输入输出输入System.in, java.io.InputStreamReader, java.util.Scanner输出System.out.println, System.out.printf, System.out.print读文件java.io.FileInputStream写文件java.io.FileOutputStream1输入Scanner扫描输入遇到\n结束。BufferedReader.read() 逐字符读取。BufferedReader.readLine() 逐行读取。2输出print不换行println换行printf格式化输出。3读文件4写文件三导入Packagejava有以下一些导入包的方式1导入包中某个对象import java.text.SimpleDateFormat2导入包中全部对象: import java.util.*3导入包中的静态字段和方法(较少使用): import static java.lang.System.*4默认导入: java默认导入了java.lang.*四语法规则1标识符标识符由字母和数字组成遵循驼峰命名规则。类的名称以大写字母开头。方法的名称以小写字母开头。变量的名称以小写字母开头。2注释单行注释用//开头。多行注释用/*开头以*/结尾。特殊多行注释以/**开头以*/结束如果有多行每行通常以星号开头。这种特殊的多行注释需要写在类和方法的定义处可以用于自动创建文档。3数据类型Java 的数据类型有两大类基本数据类型和引用数据类型。基本数据类型相对非常底层基本类型相同值的对象占有同样的存储单元判断是否相等可以用 。引用数据类型本质上都是Class相对抽象引用类型相同值的对象占用不同的存储单元判断是否相等应该用 equals方法。基本数据类型包括整型(byte,short,int,long),浮点型(float,double),布尔类型(boolean),字符类型(char)引用数据类型包括包装类型(Integer,Double,Char,Boolean,……)字符串(String),数组(Array),以及各种容器类(List,Map,Set,Queue)。用户自定义的任何Class都可以看成是一种引用数据类型。4变量声明5标点符号Java 中常用的标点符号用法总结如下()表示优先级或者函数参数列表[]用于索引或数组声明{}用于作用域用于泛型* 用于import包时的通配符用于注解篇幅限制下面就只能给大家展示小册部分内容了。整理了一份Java零基础学习笔记包括了Java基础、Javaweb、Java框架、后端中间件、Java微服务、计算机基础、算法、springcloud、Java虚拟机、spring源码、redis、MySQL、并发编程、微服务、需要全套Java零基础进阶路线笔记【点击此处即可/免费获取】https://docs.qq.com/doc/DQUFvdURDeVF3UUpz?no_promotion1is_blank_or_templateblank五编译执行1程序结构一个.java程序文件中必须有且只有一个public类该类必须有一个声明为main函数作为程序入口。并且这个main函数需要声明为 public static void 类型即静态的公开的返回值为空的函数类型。并且这个java程序的文件名必须和这个public类名保持一致。将以上代码拷贝到文本文件中命名为 Main.java。2编译执行Java是一种解释型语言其java源码需要被编译成class字节码运行在Java虚拟机上。因此执行Java程序分两步(1)使用javac编译命令将以.java结束的程序文件编译成以class结尾的字节码程序文件。javac Main.java 编译后得到 Main.class文件(2)使用java 命令运行字节码程序。java -classpath ./ Main 在JVM上执行Main.class文件编译时按下面的顺序依次查找类1查找当前package是否存在这个class2查找import的包是否包含这个class3查找java.lang包是否包含这个class。如果按照上面的规则还无法确定类名则编译报错。3classpath和jar包(1) classpathclasspath是JVM用到的一个环境变量它用来指示JVM如何搜索class。它其实就是一组目录的集合它设置的搜索路径与操作系统相关。例如在Windows系统上用;分隔可能长这样。C:\work\project1\bin;C:\shared;D:\My Documents\project1\bin在Linux系统上用:分隔可能长这样。/usr/shared:/usr/local/bin:/home/liaoxuefeng/bin如果JVM在某个路径下找到了对应的class文件就不再往后继续搜索。如果所有路径下都没有找到就报错。classpath的设定方法有两种在系统环境变量中设置classpath环境变量不推荐在启动JVM时设置classpath变量推荐。我们强烈不推荐在系统环境变量中设置classpath那样会污染整个系统环境。在启动JVM时设置classpath才是推荐的做法。实际上就是给java命令传入-classpath或-cp参数java -classpath .;C:\work\project1\bin;C:\shared abc.xyz.Hello但通常classpath这个参数不需要配置其默认值为当前目录 ./一般就够用了。(2) jar包设想一下如果有很多.class文件散落在各层目录中肯定不便于管理。如果能把目录打一个包变成一个文件就方便多了。jar包就是用来干这个事的它可以把package组织的目录层级以及各个目录下的所有文件包括.class文件和其他文件都打成一个jar文件这样一来无论是备份还是发给客户就简单多了。jar包实际上就是一个zip格式的压缩文件而jar包相当于目录。如果我们要执行一个jar包的class就可以把jar包放到classpath中java -cp ./hello.jar abc.xyz.Hellojar包还可以包含一个特殊的/META-INF/MANIFEST.MF文件MANIFEST.MF是纯文本可以指定Main-Class和其它信息。JVM会自动读取这个MANIFEST.MF文件。如果存在Main-Class我们就不必在命令行指定启动的类名而是用更方便的命令java -jar hello.jarjar包还可以包含其它jar包这个时候就需要在MANIFEST.MF文件里配置classpath了4maven项目管理工具实际项目开发中通常使用maven管理项目并打成jar包。maven使用POM文件POM.xml指定项目的依赖和打包方式。maven安装后将会在本地创建~/.m2/repository目录集中存放jar包作为本地仓库。maven搜索并载入依赖的顺序如下本地仓库-私人远程仓库-中央仓库常见的maven 命令如下mvn clean 清理编译打包输出mvn compile 项目编译mvn package 项目打包mvn install 安装到本地仓库六Java数据结构概述Java中常用的数据结构主要包括字符串(String),数组(Array),枚举(enum), 以及java.util中的各种容器类通常被称做集合。java.util中的这些容器类分成两大类一类是实现了Collection接口,另外一类实现了Map接口。容器类中常用的数据结构包括:列表(List),映射(Map),集合(Set),队列(Quene),堆栈(Stack)。当然这些数据结构也都是接口通过API封装了特定的功能下面还会有多种不同的实现。可以用统一的Iterator方式对大多数容器类进行遍历这种更加抽象的方式优于使用下标的方式进行遍历。七字符串StringJava 中的字符串和Scala中的字符串来源于同一个包java.lang.String两者具有完全相同的方法。以下为字符串一些常用操作。八数组ArrayJava 中的数组和 C中的数组很像其长度是不可变的但是数组中的元素内容是可以改变的。数组是引用类型一般是用花括号{}作为数组范围标识。java.util.Arrays 类能方便地操作数组它提供的所有方法都是静态的。1创建Array2Array的常用操作九列表ListJava中的列表List是一种有序数据结构的接口。它有两种实现,一种是ArrayList,另外一种是LinkedList。前者是顺序存储方便查询和修改特定元素。后者是链表存储方便插入和删除元素。通常情况下我们使用ArrayList更多一些。和数组Array不同List的大小是可以改变的。List的主要方法如下E是元素 e的类型在末尾添加一个元素void add(E e)在指定索引添加一个元素void add(int index, E e)删除指定索引的元素int remove(int index)删除某个元素int remove(Object e)获取指定索引的元素E get(int index)获取列表大小包含元素的个数int size()1创建List2List常用操作十映射MapMap是一种无序数据结构的接口存储键值对(key,value)。Map的常用实现是HashMap, LinkedHashMap, TreeMap。其中TreeMap是一种有序的Map.Map的常用方法是put和get。如果想查询某个key是否存在可以调用containsKey.Map中的key是唯一的作为key的对象必须实现equals和hashCode方法。使用TreeMap时放入的Key必须实现Comparable接口。Map通常用来高效地进行查找。1创建Map篇幅限制下面就只能给大家展示小册部分内容了。整理了一份Java零基础学习笔记包括了Java基础、Javaweb、Java框架、后端中间件、Java微服务、计算机基础、算法、springcloud、Java虚拟机、spring源码、redis、MySQL、并发编程、微服务、需要全套Java零基础进阶路线笔记【点击此处即可/免费获取】https://docs.qq.com/doc/DQUFvdURDeVF3UUpz?no_promotion1is_blank_or_templateblank2Map常用操作十一集合SetSet用于存储不重复的元素集合它主要提供以下几个方法将元素添加进SetEboolean add(E e)将元素从SetE删除boolean remove(Object e)判断是否包含元素boolean contains(Object e)十二迭代器Java的容器类都可以使用for each循环List、Set和Queue会迭代每个元素Map会迭代每个key。下面以List和Set的for each遍历为例。实际上Java编译器并不知道如何遍历List和Set。上述代码能够编译通过只是因为编译器把for each循环通过Iterator改写为了普通的for循环Iterator是一种抽象的数据访问模型。使用Iterator模式进行迭代的好处有对任何容器都采用同一种访问模型调用者对容器内部结构一无所知容器类返回的Iterator对象知道如何迭代。如果我们自己编写了一个容器类想要使用for each循环则该容器类要实现Iterable接口并返回一个Iterator对象下面是一个范例。十三枚举类enum如果有一些相关的常量如星期月份颜色可以将其它们定义为枚举类型。枚举类型常用的方法有name和ordinal。name():查看枚举常量值的名字。ordinal():查看枚举常量值的序号。通过enum定义的枚举类其实也是一个class只不过它有以下几个特点定义的enum类型总是继承自java.lang.Enum且无法被继承只能定义出enum的实例而无法通过new操作符创建enum的实例定义的每个实例都是引用类型的唯一实例可以将enum类型用于switch语句。因为枚举类也是class, 所以我们可以定义private的构造方法并且给每个枚举常量添加字段。十四选择结构Java的选择结构主要有 if 语句和 switch语句。switch语句是多分支结构。1if 选择语句2switch多分支结构使用switch时不要忘记break不要忘记default。篇幅限制下面就只能给大家展示小册部分内容了。整理了一份Java零基础学习笔记包括了Java基础、Javaweb、Java框架、后端中间件、Java微服务、计算机基础、算法、springcloud、Java虚拟机、spring源码、redis、MySQL、并发编程、微服务、需要全套Java零基础进阶路线笔记【点击此处即可/免费获取】https://docs.qq.com/doc/DQUFvdURDeVF3UUpz?no_promotion1is_blank_or_templateblank十五循环结构Java中的循环结构包括for循环for each循环while循环。1for循环2for each循环for each循环可以对数组字符串各种容器类型进行遍历其背后依赖于Iteratable接口。3while循环4流程控制continue、break十六异常处理Java中的异常包括两种体系Error和Exception.Error指的是严重的错误程序一般对此无能为力。如OutOfMemoryError内存耗尽NoClassDefFoundError无法加载某个ClassStackOverflowError栈溢出而Exception则是运行时的错误它可以被捕获并处理。某些异常是应用程序逻辑处理的一部分应该捕获并处理。例如NumberFormatException数值类型的格式错误FileNotFoundException未找到文件SocketException读取网络失败还有一些异常是程序逻辑编写不对造成的应该修复程序本身。例如NullPointerException对某个null的对象调用方法或字段IndexOutOfBoundsException数组索引越界Exception又分为两大类RuntimeException以及它的子类非RuntimeException包括IOException、ReflectiveOperationException等等Java规定必须捕获的异常包括Exception及其子类但不包括RuntimeException及其子类这种类型的异常称为Checked Exception。不需要捕获的异常包括Error及其子类RuntimeException及其子类。异常捕获的语句是 try...catch...finally...此外还可以用throw抛出异常如throw new IllegalArgumentException。十七类的定义Java中用关键字class定义普通类 用enum定义枚举类用abstract class定义抽象类用interface定义接口。我们先看普通类的定义和实例化。类的定义中可以用public声明为公有属性和公有方法在类的内部和外部都可以被访问。可以用private声明为私有属性和私有方法只允许在类的作用域访问不允许在类的外部访问。可以用protected声明为受保护的属性和方法只允许在类作用域及其子类作用域中访问。不使用作用域关键字声明的属性和方法默认为为package作用域在同一个package中的类可以访问。十八构造方法构造方法是类的一个特殊的方法构造方法名就是类名。构造方法没有return返回值也没有void声明。如果一个类没有定义任何构造方法那么编译器会自动为我们生成一个默认构造方法它没有参数也没有执行语句。如果我们已经定义了构造方法那么编译器不会生成默认构造方法。没有在构造方法中初始化属性时引用类型的字段默认是nullint类型默认值是0布尔类型默认值是false。我们可以为一个类定义多个构造方法使用时可以根据参数类型和数量自动进行匹配。这叫做构造方法的重载。所有方法都支持方法重载。十九静态属性和静态方法通过static修饰的属性为静态属性通过static修饰的方法为静态方法。静态属性和静态方法属于类而不属于特定的实例在类的实例之间共享。可以通过类名直接调用静态属性和静态方法也可以通过实例对象间接调用。静态方法中不能够通过this关键字使用实例属性。篇幅限制下面就只能给大家展示小册部分内容了。整理了一份Java零基础学习笔记包括了Java基础、Javaweb、Java框架、后端中间件、Java微服务、计算机基础、算法、springcloud、Java虚拟机、spring源码、redis、MySQL、并发编程、微服务、需要全套Java零基础进阶路线笔记【点击此处即可/免费获取】https://docs.qq.com/doc/DQUFvdURDeVF3UUpz?no_promotion1is_blank_or_templateblank二十继承类和类之间有三种关系A is B, A use B, A has B.其中A is B 就是 继承关系。如果A 的属性中有 B的类型叫做 A has B.如果A 的方法的参数中有 B的类型叫做 A use B.我们重点介绍继承关系。Java中用extends声明继承关系。public, protected声明的属性和方法可以被子类继承而private声明的属性和方法不可以被子类继承。二十一多态Java的实例方法调用是基于运行时的实际类型的动态调用而非变量的声明类型。这个非常重要的特性在面向对象编程中称之为多态。它的英文拼写非常复杂Polymorphic。多态具有一个非常强大的功能就是允许添加更多类型的子类实现功能扩展却不需要修改基于父类的代码。这就实现了面向对象编程非常著名的开闭原则对扩展开放对修改封闭。二十二抽象类使用abstract声明的方法为抽象类抽象类只能够被继承不能够创建抽象类的实例。抽象类的方法可以被abstract声明为抽象方法抽象方法没有执行语句。抽象类的作用在于定义签名规范具体的业务实现留给子类去做。二十三接口在抽象类中抽象方法本质上是定义接口规范即规定高层类的接口从而保证所有子类都有相同的接口实现这样多态就能发挥出威力。如果一个抽象类没有字段所有方法全部都是抽象方法那么该抽象类就可以被改写成接口(interface)。Java 中的 interface具有和 Scala中的 trait相似的功能。一个class只能继承自一个父类但可以继承自多个接口。通过关键字 implements 声明class和interface之间的继承关系。interface和interface之间也可以相互继承使用关键字 extends来表示这种扩展关系。interface不能有实例属性但可以有静态属性。interface中的所有方法都默认为抽象方法因此无需关键字abstract声明。interface的非抽象方法用default关键字声明叫做default方法。default方法中不能够引用实例属性但可以调用抽象方法。除了default方法和static声明的静态属性interface基本上可以看成是一个躯壳。二十四反射通常我们通过类来创建实例但反射机制让我们能够通过实例来获取类的信息。包括类的名字类的属性和方法签名类的继承关系等等。当加载进一个class类文件时JVM会创建一个Class类型的实例来保存类的信息。1获取Class类型实例2访问属性Field getField(name)根据字段名获取某个public的field包括父类Field getDeclaredField(name)根据字段名获取当前类的某个field不包括父类Field[] getFields()获取所有public的field包括父类Field[] getDeclaredFields()获取当前类的所有field不包括父类3调用方法Method getMethod(name, Class...)获取某个public的Method包括父类Method getDeclaredMethod(name, Class...)获取当前类的某个Method不包括父类Method[] getMethods()获取所有public的Method包括父类Method[] getDeclaredMethods()获取当前类的所有Method不包括父类4调用构造方法5获取继承关系二十五泛型泛型就是编写模板代码来适应任意类型。Java的容器类中大量使用了泛型。泛型的好处是使用时不必对类型进行强制转换它通过编译器对类型进行检查。Java中泛型的实现是使用的擦拭法编译器编译包含泛型的类时将泛型换成Object类型编译器编译泛型实例化的代码时根据泛型的具体类型进行安全转型而JVM虚拟机对泛型一无所知。因此泛型的类型不能是int,float,double等基本类型并且不能够获取泛型的反射。二十六注解Java中的注解是放在Java源码的类、方法、属性、参数前的一种特殊注释,以开头。注解可以看成用作标注的一种元数据。Java中有3中不同的注解SOURCE类型的注解由编译器使用在编译期被丢掉了如OverrideCLASS类型的注解仅保存在class文件中这类注解只被一些底层库使用它们不会被加载进JVMRUNTIME类型的注解会被加载进JVM并且在运行期可以被程序读取。Java语言使用interface语法来定义注解Annotation定义注解一般需要用到元注解。元注解meta annotation就是可以用来修饰其它注解的注解。Java标准库已经定义了一些元注解我们只需要使用元注解通常不需要自己去编写元注解。注解定义后也是一种class所有的注解都继承自java.lang.annotation.Annotation因此读取注解需要使用反射API。RUNTIME类型的注解如何使用完全由程序自己决定。二十七Scala和Java对比Java发明于1995年Scala发明于2003年。Scala和Java都是JVM语言两者的源码都将编译成.class字节码在JVM虚拟机上执行。因此Scala和Java可以无缝混编。Scala在Java基础上做了重大的改进使其兼备静态语言和脚本语言的特色。下面列举一些比较显著的差异。1Scala比Java更加简洁Java 中打印用 System.out.println, 而Scala用 println类似Python。Java 许多地方语句中的分号”;“不能省略, 而Scala可以省略类似Python。Java 声明变量时先声明类型再声明变量名而Scala则先变量名必要时用冒号说明类型类似Python。Java 定义方法无需关键字Scala 定义方法用关键字 def可读性更强类似Python.Scala支持for推导式,类似Python.Scala 支持类型推断Java 在后面的版本才增加了 var 关键字来支持类型推断。Scala 支持隐式类型转换和隐式参数。2Scala比Java更加灵活Java必须先编译后才能执行Scala解释器可以直接运行Scala脚本。Java编程风格统一为面向对象Scala支持面向对象和函数式编程多种风格Java中的多分支用switch, Scala使用match模式匹配实现多分支。Java中的类支持静态属性和静态方法Scala用伴生对象和伴生方法概念将静态属性和方法与实例属性和方法分离。Java的循环中支持break和continue关键字Scala的循环中不支持。3常用标点符号差异Java中导入全部对象用星号作为通配符Scala中用下划线作为通配符。Java中用方括号来取索引Scala中用圆括号来取索引。Java中用尖括号来表示泛型Scala中用方括号来表示泛型。Java中的数组用花括号来表示Scala中一般用工厂方法。Java中可以用冒号来书写for each语句,Scala中用- 来书写。二十八Java和C的对比C发明于1983年而Java发明于1995年。C代码直接编译成机器码运行在裸机上而Java代码编译成字节码运行在虚拟机上。C编译的最终结果是一个程序生成一个exe文件。Java编译结果是一个程序中有多少类就生成多少个与类名相同的class文件。Java的语法大量借鉴了C但和C相比Java是一门纯面向对象的语言风格更加简洁统一。下面列举一些两者语法上的差异。1C 导入package使用 #include 而 Java使用 import 关键字 。2C 支持指针直接操控内存而 Java 抛弃了令人困惑的指针功能。3C 使用析构函数回收垃圾Java自动回收GC算法。4C 支持直接多继承性Java用接口来实现多继承性。5C 中可以在类的外部可以定义函数而Java不允许在类和接口外面直接定义方法。