java 初探(二)

来源:互联网 发布:end.js 编辑:程序博客网 时间:2024/05/29 05:05
java较python而言是一门规范性的语言,脚本语言如python
适用于有关业务逻辑的快速开发,诸如爬虫、数据挖掘、机器学习等
方向提供了相对丰富的接口,由于其脚本的特征难以体现编程功底,
更像是临时工。既然不想做临时工,就学java吧。
java中的基本注释形式与是与C++类似的 只不过添加了/** */
这种doc注释方式,这基本上与python将'''作为注释的默认
行为是相同的。
final 用于声明仅进行一次变量初始化并不修改的变量。
是一种常量声明,可以将其视作C++中的枚举,因为java中
的枚举与其不同。
由于java没有孤立于类的单独函数概念,故上述final
一般用于类内某个函数内部的变量声明,但对于相同的类
不同的methods来声明可共用的常量一般使用static final
于类的作用域来声明,如果变量加修饰public则可以被其它
类以ClassName.ValuableName的方式进行调用。
java数值运算有一些精度问题,这可以通过将main函数进行如下
声明进行修正:
public static strictfp void main(String []args)
进一步地java提供了BigInteger及BigDecimal类用于进行精度运算,
由于没有操作符重载,只能调用方法add multiply等进行算数运算。
java xor运算|| &&支持短路运算, ?:等C++特性。
java.lang开头的包是被默认导入的。
java System.out.println是类方法,为对象
System.out此类实例调用的方法;Math.sqrt为静态
方法。两者都是可以直接调用不需导入的。
与python from math import *相对应的
有java import static java.lang.Math.*
这种所谓静态导入将在后面进行讨论。
java中String为常量,不可在变量层次进行直接修改,仅能
通过拷贝、赋值等方式进行修改。python也是这样。
这保持了String变量的唯一性,与之相对应的是C++ char数组
可以通过改变某些字符使得前后不统一的操作出现。
由于这个特点,要注意在写java代码时尽量多地使得关于String
的操作是比较而非改变(拷贝)。
java由于没有重载操作符的方式故使用equals函数实现==
(equalsIgnoreCases、length)
trim对应python strip
在不显式使用unicode的情况下,codePointCount无用。
String单个char的访问可以通过charAt(n)实现。
一般不进行低水平String方法(与char相关)的使用。
StringBuilder类可以更高效地产生String对象,其基本使用方法
为初始化并调用append方法于尾部添加元素,最后调用toString方法
返回string对象,其基本上是一个迭代器方法,可以使用诸如insert的
方法进一步对string进行修改。
console交互的读取通过java.util.Scanner(import)完成,
当要将读取绑定到输入流时,初始化方法为Scanner(System.in)
可以使用next方法读取下一word,或nextLine读下一行。
从文件读取输入new Scanner(Paths.get("myfile.txt"));
输出到文件PrintWriter out = new PrintWriter("myfile.txt");
输入输出的文本路径位于eclipse所设定的根目录,推荐使用绝对路径。
String format output部分基本与C python时相同的。
可以使用String.format方法实现python中"%i ...%d" % (, )
的方法,二者在具体形式上是混淆的。
一些格式化的细节不再给出,这里仅仅给出一个格式化的例子:
System.out.printf("%1$s %2$tB %2$te, %2$tY", "Due date:", new.Date());
其示例输出为Due date: February 9, 2004
$前的数字决定使用哪一组 s表示String t表示Date B月份 e日 Y年
抛出异常的实现可以如下:
public static void main(String []args) throws FileNotFoundException
java的控制流基本与C++相同,值得注意的是如C python中的
作用域变量嵌套定义是被禁止的,会被编译出错。
java允许在控制流中不加{}而是单句执行(与C++相同)
1!=1.0
switch语句由于跳出格式的问题不推荐使用,如果使用推荐用
enum,并且使用case进行判断时不需要提供枚举名称。
java支持针对label的break,即在break可以跳出指定的代码块,
省却了在C++及python中多个break的麻烦:
Ex
  First:
  for(int i = 0;i < 10; i++){
   for (int j = 10;j < 20; j ++){
    System.out.printf("%d, %d", i, j);
    System.out.println();
    if(j == 15)break First;
    
   }
  }
java array与C的很类似,,区别仅仅出现在默认初始化上的不同,
基本上就是C中的指针动态分配内存,但仅仅是形式上的相似不具备指针的增减运算。
一般的Object array在初始化后元素默认值为null。
动态改变序列大小的容器ArrayList将在后来进行讨论。
Arrays(java.util.*)
通过调用Arrays.toString(some array object)方法可以实现
将array object转化为一般的String进行方便输出的功能,当然对于数组
中的元素为自定义类型的情况,没有那么简单。
Arrays.copyOf(some array object, length)可以实现array
object的真正拷贝以赋予新的array object以值拷贝,否则使用=
是指针拷贝,这与python对于容器的观点是相同的。
Arrays.sort执行排序。
array支持列表初始化。
java支持范围循环,可惜没有类型推断在这个层面上没有C++11简洁。
java在类结构上直接实现了命令行传参的能力String[] args
(python opt相关)
java类中有Object(与python类似)
对于一个对象,仅进行声明而不进行初始化的行为是应该被避免的,
如果声明后没有进行初始化应进行=null操作,这与C中的指针
是类似的。


0 0