zoukankan      html  css  js  c++  java
  • 【Java】_2_Java程序入门第五课

      我们知道,在C程序中,主入口函数(通常大家叫主函数,就是main()函数)可以获取系统传递给程序的参数,其主函数的定义形式如下:

    #include <stdio.h>
    
    int main(int argc;char* argv[])
    {
         statement;

       return 0; }

      在C中,main函数的形式参数: argv指针数组存储的是传递的参数的指针,argc存储的是主函数获取的参数的个数,即argc存储的是数组argv的index

    大小,并且argv[0]存储的是可执行程序的文件名(这个包括路径?嘻嘻,这里卖个关子)。

      那么在Java中是否具有这样的机制呢? 

    【Java的命令行参数】

      Java的入口函数main也提供了C语言一样的机制,我们来看入口函数的main的定义:

    /*
    
    */
    
    public class class_name
    {
          public static void main(String args[])
          {
               statements;
          }
    }      

      可以看到,main函数也存在形式参数:String args[]

      这里,系统传递给Java程序的参数就是存储在形式参数  args[] 中,大家可以看到Java中的形式参数没有:argc count项? 这是为什么呢?

    /*
    本程序代码测试For Each语句 和命令行参数
    */
    
    public class ForEach
    {
      public static void main(String[] args)
      {
        //测试for each语句和main函数的参数
        //for(String getmain:args)
        //System.out.println(getmain);
    
        for(int i=0;i<args.length;i++) 
            System.out.println(args[i]);
    
      }
    }

      程序的执行结果如下:

      通过程序我们看到,Java的main函数确实接受了系统传递过来的参数,并且没有存储Java程序的名称。同时我们可以看到不需要

    argc count计数也能完整的输出输入的参数;这就是Java与C语言main函数之间的差别。

    【Java For Each循环】 

      如果接触过VB,那么大家一定会熟悉VB结构中提供的For Each循环结构;同样在Java中在SDK 5.0 以后的版本也提供了这样一个循环结构。

    通过For Each循环可以处理具有集合特性的数据,例如可以处理数组、对象集合等。其语法结构是:

      for(Object object_var:Object Set)  statement;

          对于集合Object Set中的每一个对象object_var,执行statement。

      我们可以测试一下这个语句:

    /*
    本程序代码测试For Each语句 和命令行参数
    */
    
    public class ForEach
    {
      public static void main(String[] args)
      {
        //测试for each语句和main函数的参数
        for(String getmain:args)
        System.out.println(getmain);
    
        //for(int i=0;i<args.length;i++) 
            //System.out.println(args[i]);
    
      }
    }

      程序的执行结果如下所示:

      可以看到上面的输出结果和用for循环驱动是一致的。

    【Java 程序执行的返回值】

      可以看到,Java程序的入口函数定义为void型,就是不返回任何值,但是有时候我们需要返回值那么怎么办呢?我们是否可以和C中一样

    将Java的入口函数定义为int型(或者是其他返回类型呢)?

      遗憾的是,Java程序的main函数必须定义为void类型,那么我们是否不能有返回值给系统了呢?

      Java虽然没有提供入口函数的return机制,但是提供的System类的方法可以说实现这个目的。语法如下:

         System.exit(x);  //通过这个方法实现返回值到系统。

      具体的实例就不做了。

    【Java 字符串类型】

       字符串:在Java中字符串是Unicode字符序列。和C语言类似,Java没有内置标准的数据类型来表示字符串,而是通过在标准库中

    提供一个“预定义的类”来提供对字符串处理的支持;这个类就是:String

       根据OOP的思想,任何一个字符串都可以认为是String类的实例Instance。而在Java中沿袭了C/C++体系的习惯,在Java中用

    双引号来表示字符串。

    Exp:

      “abcde”;//Java字符串

          String EmptyStr="";  //空字符串

      String  Greeting=“Hello world”;//字符串“Hello world”

    1、子串

      从字符串提取的一个小字符串就是一个子串,包括字符串本身;这通过String提供的substring方法来实现。

      其语法是:

      object.substring(index_start,index_end);

      由于字符串引用索引是从index_start可以0开始,且index_end是第一个不需要提取的字符,因此[index_start,index_end)是左闭右开区间,

    因此这里需要注意 。 

      提取的子串的长度为: index_end - start_index.

    Exp:

      String greeting="Hello world";

          String sub_greeting=greetring.substring(0,5);

          String sub_sub_greeting=sub_greeting.substring(1,3);

    这样我们的子串sub_greeting就是“Hello”;而sub_sub_greeting则是“el”;

    /*
    本程序测试字符串String类
    */
    
    public class string
    {
      public static void main(String args[])
      {
         String greeting="Hello world!";
         String sub_greeting=greeting.substring(0,5);
         String sub_sub_greeting=sub_greeting.substring(1,3);
        
        System.out.println(sub_greeting);
            System.out.println(sub_sub_greeting);
    
    
        
         System.exit(0);
      }
    }

    执行结果如下:

    2、字符串的拼接

      我们知道在C++中,通过运算符重载的功能,将 + 重载提供字符串拼接运算,那么在Java中是否具有这样的机制呢?

      Java中不具有运算符重载机制,但是我们依然可以通过 + 运算符连接两个字符串。

    Exp:

      String string_link="hello" +" " + "world!";

      这里: string_link 将表示: “hello world!” 这个字符串。

    3、字符串的不可改变性

      接触过C/C++的对字符串的操作可能在这里会引起部分误解,我们知道如下:

    Exp:   *.c

      char p[]="abcdefg";

          p[1]='x' ; //是可以通过这样的方式来改变字符串的内容的。实际上并没有改变“abcdefg”的内容,而是改不了变量p[1]的内容。

      而在Java中不能通过这这机制来改变String对象中的内容;因为String 对象更像一个引用,而不是数组变量。  

    Exp: *.java

      String  str="abc";

         str[1]='x'; //这种语法是错误的,Java的String类是不可改变指向的内容; 这类似于C/C++中的 char *p=“abcd”一样;不能通过p[1]

                          //改变“abcd”的内容一样。

      如果需要改变字符串的内容,则可以通过Stringbuffer类实现。

    4、检测字符串是否相等

      有时候需要检测字符串是否相等,那么我们怎么检测两个字符串是否相等呢?

      在String类中提供了一个方法来实现这个功能:object.equals(String obj);

      如果测试的object对象和obj对象相等则返回true;否则返回false。

    Exp:

      String   str="Hello";

         str.equals("Hello"); //这里返回true。 当然也可以这样测试  “Hello”.equals(str);  同样返回true。

      需要说明的是,equals方法使大小写敏感的,就是说  “Hello”.equals("hello"); 返回的是false。

      如果需要不区分大小小,则可以使用equalsIgnoreCase 方法来测试。

    Exp:

      "Hello".equalsIgnoreCase("hello"); //返回值为true;

      注意:

        不能用 == 符号来测试两个字符串String对象是否相等,虽然有时候 == 确实能进行比较。== 的用途是用来比较两个字符串

    的存储位置是否一致,如果一致则运算结果是true,否则为false。

        == 运算符可以用来检测共享字符串是否相等,子串串常量是共享的,而 + 或substring方法得到的字符串均不是共享的。

    5、字符串存储空间和字符串长度(即代码点和代码单元)

      我们知道Java中字符是采用Unicode编码的,这样字符串存储的空间就比char类型多了一倍。

      通常可以这样认为: 代码点计数 就是 字符串的存储空间计数; 而代码单元计数就是字符串长度(即字符个数)计数。可以通过下面

    的方法获取字符串长度:

      int  str_length="hello world".length();

         而如果需要获取代码点计数则需要通过下面的方法:codePointCount(start_index,end_index);

    Exp:  获取字符串“hello world”的存储空间大小。

      int cp_str="Hello world".codePointCount(0,"Hello world".length());

      

      有时候需要获取字符串指定位置index的代码单元的内容,我们可以通过:charAt(index);方法; 因为String的index是从0开始计数的

    所以    0<= index < object.length-1 .

    Exp: 获取字符串“hello world" 的第四个字符

       char  four_in_str="hello world"。charAt(4-1);  //这样four_in_str存储的就是字符'l'

    6、 Java的String类的API接口

      Java提供了很多的String类的API接口函数,这些函数用来处理字符串将非常容易,具体就不说了,太多了。

    【小结】

      到这里,书第三章基本已经看完了,接下来的事情就是第四章了,粗略的看了一下,第四章主要是介绍OOP的内容。

      哎, 学习进度有点慢啊, 这个还真需要时间啊。

  • 相关阅读:
    【ZOJ3195】Design the City-LCA算法
    【ZOJ3195】Design the City-LCA算法
    【POJ1330】Nearest Common Ancestors-LCA算法
    【POJ1330】Nearest Common Ancestors-LCA算法
    【POJ3237】Tree-树链剖分
    【POJ3237】Tree-树链剖分
    【SPOJ375】Query on a tree-树链剖分
    perl 回调必须是函数引用
    运行复制的ZooKeeper 部署
    运行复制的ZooKeeper 部署
  • 原文地址:https://www.cnblogs.com/volcanol/p/2848342.html
Copyright © 2011-2022 走看看