zoukankan      html  css  js  c++  java
  • 2019暑假Java学习笔记(一)


    0704,0705

    基础语法(上)

    JVM:Java虚拟机
    JDK:Java开发工具包
    JRE:Java运行环境

    HelloWorld

    新建源文件HelloWorld.java,并键入下面的内容。

    public class HelloWorld{
    	public static void main(String[] args){
    		System.out.println("HelloWorld!");
    	}
    }
    

    在命令行切换到源代码目录,先用
    javac HelloWorld.java进行编译,
    然后用
    java HelloWorld运行。



    变量

    变量都需要命名,叫做“变量名”。
    变量需要声明(declare)才能使用。
    可以在程序的任何位置声明变量。
    1.声明变量的语法格式
    数据类型 变量名称
    int a = 1;
    2.输出变量a的语句是
    System.out.println(a);



    常量

    常量的值是不能被修改的。
    在变量的前面添加关键字final即可声明一个常量。
    在Java编码规范中,要求变量名必须大写。
    1.声明常量的语法格式
    final 数据类型 常量名 = 值
    final double PI = 3.14
    常量也可以先声明,再进行赋值,但只能赋值一次,比如:

    final int FINAL_VARIABLE;
    FINAL_VARIABLE = 100;
    

    2.输出常量PI的语句是
    System.out.println(PI);

    数据类型

    Java中共有八种基本数据类型,详见下表。

    数据类型 默认值 存储格式 数据范围 包装类型
    short 0 2个字节 -32,768到32,767 Short
    int 0 4个字节 -2,147,483,648到2,147,483,647 Integer
    byte 0 1个字节 -128到127 Byte
    char 2个字节 Unicode的字符范围:'\u0000'(即为0)到'\uffff'(即为65,535) Character
    long 0L或0l 8个字节 -9,223,372,036,854,775,808到9,223,372,036,854,775,807 Long
    float 0.0F或0.0f 4个字节 32位IEEEE-754单精度范围 Float
    double 0.0或0.0D(d) 8个字节 64位IEEE-754双精度范围 Double
    boolean false 1位 true或false Boolean

    整数

    byte、short、int、long四种基本数据类型表示整数,注意long类型,使用long修饰的变量需要在数值后面加上L或者l,比如
    long num = 1L;,一般使用大写L避免与1混淆。

    浮点数

    float和double类型表示浮点数,注意float类型的数值后面需要加上F或者f,否则会当成DOuble类型处理。double类型的数值可以加上D或者d,也可以不加。

    char类型

    char a = 'a';
    char可以和整数类型互相转换,比如
    char a = 97;
    也可以用十六进制表示
    char a = '\u0061';

    boolean类型

    boolean类型(布尔类型)用于表示真值true或者假值false,Java中布尔值不能和整数类型或者其它类型互相转换。



    String

    Java中使用String类来定义一个字符串,字符串是常量,它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。
    1.String对象的初始化格式
    String s0 = "abc";
    或者
    String s1 = new String("abc");
    两种方法其实有很大的区别。前者会在栈中穿件一个对象引用变量s0,然后查看栈中是否存在"abc",如果没有,则将"abc"存放进栈,并令引用变量s0指向他;如果已经有"abc",则直接令s0指向它。
    而后者是Java中标准的对象创建方式,其创建的对象将直接放置到堆中,每调用一次就会创建一个新的对象。
    前者可能是一个陷阱,可能没有创建新的对象。
    下述代码展示了二者的不同。
    String两种声明
    其中"=="比较的是两个对象在内存中存储的地址是否一样。

    计算字符串长度

    length()方法

    public int length(){
    }
    

    调用方法:字符串标识符.length();返回一个int类型的整数(字符串中字符数,中文字符也是一个字符)。例如:

    String s1 = "JoJo";
    String s2 = "和Dio的奇妙冒险";
    int len1 = s1.length();
    int len2 = s2.length();
    

    则变量len1的值是4,变量len2的值是9。
    顺便提一下,如果想知道一个整型数组的长度,那么数组名.length即可,也就是去掉length后面的小括号。

    字符串比较

    equals()方法,该方法的作用是判断两个字符串对象的内容是否相同,相同则返回true,不同则返回false。
    equals()方法比较是从第一个字符开始,一个字符一个字符一次比较。
    如果想忽略大小写关系,则使用equalsIgnoreCase()方法即可,用法与equals相同。

    String s1="JoJo";
    String s2="JOJO";
    System.out.println("用equals()比较,结果为"+s1.equals(s2));
    System.out.println("用equalsIgnoreCase()比较,结果为"+s1.equalsIgnoreCase(s2));
    

    结果为:

    用equals()比较,结果为false
    用equalsIgnoreCase()比较,结果为false
    

    字符串连接

    字符串连接有两种方法:
    1.使用+
    String s = "JoJo"+"的奇妙冒险";
    使用+进行连接,不仅可以连接字符串,也可以连接其他类型。但是要求连接时至少有一个参与连接的内容是字符串类型。
    2.使用String类的concat()方法

    String s0 = new String("JoJo");
    String s1 = new String("的奇妙冒险");
    String s2 = s0.concat(s1);
    

    charAt()方法

    charAt()方法的作用是按照索引值(规定字符串中第一个字符的索引值是0,第二个字符的索引值是1,依次类推),获得字符串中的指定字符。

    String s = "abc";
    char c = s.charAt(1);
    

    则c的值是'b'。

    字符串常用提取方法

    方法 返回值 功能描述
    indexOf(int ch) int 搜索字符ch第一次出现的索引
    indexOf(String value) int 搜索字符串value第一次出现的索引
    lastIndexOf(int ch) int 搜索字符ch最后一次出现的索引
    lastIndexOf(String value) int 搜索字符串value最后一次出现的索引
    substring(int index) String 提取从位置索引开始到结束的字符串
    substring(int beginindex,int endindex) String 提取beginindex和endindex之间的字符串部分
    trim() String 返回一个前后不含任何空格的调用字符串的副本
    说明:子字符串包含beginindex的字符,但不包含endindex的字符。

    练习:字符串处理

    要求:

    • 从控制台输入一行字符串
    • 去除字符串中的所有空格
    • 打印去除空格后的字符串
      提示:
      java.util.Scanner可以获取控制台输入。
      我的代码:
    import java.util.Scanner;
    public class StringUtil{
        public static void main(String[] args){
            Scanner in =new Scanner(System.in);
            String a=in.nextLine();
            int i;
            for(i=0;i<a.length();i++){
                if(a.charAt(i)!=' '){
                    System.out.print(a.charAt(i));
                }
            }
        }
    }
    

    注意,一定要有第一句import java.util.Scanner,不然无法使用Scanner获取控制台输入。

    练习:对比字符串

    要求

    • 从控制台输入字符串a和字符串b
    • 比较字符串a和字符串b是否长度、内容等完全一致
    • 如果完全一致,输出相同,如果不一致,输出不同
    • 禁止使用equals方法
      我的代码:
    import java.util.Scanner;
    public class ContrastString{
        public static void main(String[] args){
            Scanner in = new Scanner(System.in);
            String a = in.nextLine();
            String b = in.nextLine();
            int flag = 1;
            int i;
            if(a.length()!=b.length()) flag=0;
            for(i=0;i<a.length();i++){
                if(a.charAt(i)!=b.charAt(i)) flag=0;
            }
            if(flag==1) System.out.println("相同");
            else System.out.println("不同");
        }
    }
    

    上面这个有Bug,如果第一个字符串的长度比第二个长,就会报下面的错误。

    java ContrastString                                                      [15:25:55]
    nihaoma
    nihal
    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 5
            at java.lang.String.charAt(String.java:658)
            at ContrastString.main(ContrastString.java:11)
    

    那么学习了exit用法后,修改程序,下面这个就去除了Bug。

    import java.util.Scanner;
    public class ContrastString{
        public static void main(String[] args){
            Scanner in = new Scanner(System.in);
            String a = in.nextLine();
            String b = in.nextLine();
            int flag = 1;
            int i;
            if(a.length()!=b.length()){
                System.out.println("不同");
                System.exit(0);
            }
            for(i=0;i<a.length();i++){
                if(a.charAt(i)!=b.charAt(i)){
                    System.out.println("不同");
                    System.exit(0);
                }
            }
            System.out.println("相同");
        }
    }
    


    运算符

    运算符是一种符号,它是连接一个以上的操作符,实现某种功能的运算。

    算数运算符

    用于数学表达式。
    "+","-","*","/","%","++","--"很简单,不列表说明了。前5个为双目运算符,后2个为单目运算符。
    注意,若int a = 5,则a++=5,++a=6。
    而且即使把a++放在System.out.println里,虽然这时输出的a的值没有变,但其实之后a的值就变了。

    int a = 5;
    System.out.println(a++);
    System.out.println(++a);
    

    输出结果为:

    5
    7
    

    可见,a++确实改变了a的值。

    位运算符

    位运算符应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。
    位运算时先转换为二进制,再按位运算。
    下面的表格中,变量a的值为60,变量b的值为13:

    位运算符 名称 描述 举例
    & 按位与 如果相对应位都是1,则结果为1,否则为0 (a&b),得到12,即0000 1100
    | 按位或 如果相对应位都是0,则结果为0,否则为1 (a|b),得到61,即0011 1101
    ^ 按位异或 如果相对应位值相同,则结果为0,否则为1 (a^b)得到49,即0011 0001
    ~ 按位补 翻转操作数的每一位,即0变成1,1变成0 (~a)得到-61,即1100 0011
    << 按位左移 左操作数按位左移右操作数指定的位数 a<<2得到240,即1111 0000
    >> 按位右移 左操作数按位右移右操作数指定的位数 a>>2得到15即1111
    <<< 按位右移补零(无符号右移) 左操作数指定的值按右操作数指定的位数右移,移动得到的空位以零补充 a>>>2得到15即0000 1111

    逻辑运算符

    逻辑运算符是通过运算符将操作数或等式进行逻辑判断的语句。
    "&&","||","!","^",只有最后一个异或有点难,不列表了。除了"!"都为双目运算符。
    异或的用法:如果两个操作数逻辑相同,则结果为假,否则为真。

    关系运算符

    关系运算符生成一个boolean结果,它们计算的是操作数的值之间的关系。如果关系是真实的,结果为true,否则,结果为false。
    "==","!=",">","<",">=","<="都很简单,不再列表。除了这些二元运算符,Java还有唯一的一个三目运算符?:
    语法格式:布尔表达式?表达式1:表达式2
    (相当于一种简单if else的代替)

    • "=="和"!="适用于所有的基本数据类型,其他关系运算符不适用于boolean,因为boolean值只有truefalse,比较没有任何意义。
    • "=="和"!="也适用于所有对象,可以比较对象的引用是否相同。

    引用:Java中一切都是对象,但操作的标识符实际是对象的一个引用。

    运算符的优先级

    运算符优先级 运算符优先级2 ###(整数的输入) ```java Scanner in = new Scanner(System.in); int x1 = in.nextInt(); int x2 = in.nextInt(); ``` 别忘了开头加上`import java.util.Scanner;`哦。 *** *** ##关键字和语句 ###关键字 Java的关键字对Java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名。 目前共50个关键字,其中,"const"和"goto"这两个关键字在Java语言中并没有具体含义。 Java关键字 *** *** ##方法 Java中的方法可以看成一个功能的集合,是为了解决特定问题的代码组合。 1.方法的定义语法: ``` 访问修饰符 返回值类型 方法名(参数列表){ 方法体 } ``` 例如: ```java public void functionName(Object arg){

    }

    在上面的语法说明中:
    1.**访问修饰符:**代表方法允许被访问的权限范围,可以是public、protected、private或者省略(default),其中public表示该方法可以被其他任何代码调用。
    2.**返回值类型:**方法返回值的类型,如果方法不返回任何返回值,则返回值类型指定为void(代表无类型);如果方法具有返回值,则需要制定返回值的类型,并且在方法体中使用return语句返回值。
    Java的方法与C的函数很相似,不同的是,方法与对象有关,而函数与对象无关。方法的参数传递通常是隐式的,他可以直接操作类内部的数据。方法依赖于某个特定的对象,我们可以说“调用对象X的Y方法”,而不能说“调用Y方法”。
    3.**方法名:**是方法的名字,必须使用合法的标识符。
    >Java标识符由数字,字母和下划线(_),美元符号($)或人民币符号(¥)组成。在Java中是区分大小写的,而且还要求首位不能是数字。最重要的是,Java*关键字*不能当作Java标识符。
     1.类和接口名。每个字的首字母大写,含有大小写。例如:MyClass,HelloWorld,Time等。
     2.方法名。首字母小写,其余的首字母大写,含大小写,尽量少用下划线。例如,myName,setTime等驼峰式命名。
     3.常量名。基本数据类型的常量名使用全部大写字母,字与字之间用下划线分隔。对象常量可大小混写。例如:SIZE_NAME。
     4.变量名。可大小写混写,首字符小写,字间分隔符用字的首字母大写。不用下划线,少用美元符号。给变量命名是尽量做到见名知义。
    
    4.**参数列表:**是传递给方法的参数列表,参数可以有多个,多个参数间以逗号隔开,每个参数由参数类型和参数名组成,以空格隔开。当方法被调用时,传递值给参数。这个值称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
    5.**方法体:**方法体包含具体的语句,定义该方法的功能。
    
    根据方法是否带参,是否带返回值,可将方法分为四类:
    * 无参无返回值方法
    * 无参带返回值方法
    * 带参无返回值方法
    * 带参带返回值方法
    
    当方法定义好之后,需要调用才可以生效,我们可以通过main方法(main方法是Java程序的入口,所以需要用它来调用)来调用它。示例:
    ```java
    public class MethoDemo{
    	public static void main(String[] args){
    		method();
    	}
    	public static void method(){
    		System.out.println("方法被调用");
    	}
    }
    


    参考

    Java编程基础(实验楼)
    Java中String初始化的两种方式



    to be continued

    总有一天,我会用高亮的代码段让这里焕然一新!这是我的宣言!

  • 相关阅读:
    View传参数到Controller(asp.net mvc3) 中庸
    ExtJS实战(3)spring
    spring AOP(2)
    ExtJS实战(1)准备工作和界面赏析
    ExtJS+DWR+Spring+Hibernate开发HRMS(5)
    ExtJS实战(2)hibernate
    ExtJS实战系列前言
    Hibernate QBC高级查询
    ExtJS+DWR+Spring+Hibernate开发HRMS(4)
    ExtJS+DWR+Spring+Hibernate开发HRMS(3)
  • 原文地址:https://www.cnblogs.com/hardcoreYutian/p/11131906.html
Copyright © 2011-2022 走看看