Java学习笔记2——数据类型、变量与字符串

Class类出现问题:Implicit super constructor Object() is undefined for default constructor. Must define an explicit constructor

解决方法:工程上右键选Properties——>Java Build Path——>Libraries——>Add Library——>JRE System Library         ——>Next——>Execution environment——>选择版本或workspace default jre——>Finish

Java应用程序的基本结构:

public class ClassName        /*关键字public称为访问修饰符,用于控制程序的其他部分对这段代码的{访问级别;
                              *关键字class表明Java程序中的全部内容都包含在类中;
                              *类名是首字母大写的名词, 如由多个单词组成,每个单词首字母均应大写(骆驼命名法:CamelCase)
public static void main(String[] args)    *运行编译程序时,从main方法开始执行,每个Java应用程序必须有一个main方法,
                                          *且必须声明为public                                
     {                                    */
        program statements                  
     }                   
}   

数据类型

Java是一种强类型语言,必须为每一个变量声明一种类型。在Java中,一共8中基本类型,1种非基本类型(8+1String类)。

  • 数值型包括整型和浮点型:整型:int 4字节 32位;short 2字节 16位;long 8字节 64位; byte 1字节 8位 。浮点型:float 4字节 32位;double 8字节 64位。

!警告:浮点数值不适用于禁止出现舍入误差的金融计算中,例如,命令System.out.println(2.0-1.1)将打印出0.899999999999999,而不是0.9,主要因为浮点数值采用二进制系统表示,而二进制系统中无法精确的表示1/10。类似于十进制无法精确表示1/3,如需要在数值计算中不含有任何舍入误差,使用BigDecimal类。

  • 非数值类型:char;boolean(false&true);String

变量

       一个数据存储空间的表示,不同的数据存入具有不同的内存地址对应空间,相互独立,计算机中一块特定的内存空间,有一个或多个字节组成。在Java中,每一个变量属于一种类型(type)。在声明变量时,变量所属的类型位于变量名之前。

1、声明变量

DataType  variableName;     数据类型  变量名;

2、变量初始化——声明一个变量后,必须用赋值语句对变量进行显式初始化。

  • 定义时初始化变量:    DataType variableName = value;    数据类型  变量名 = 值;
  • 定义后初始变量值:    DataType variableName;  variableName = value;   数据类型  变量名; 变量名 = 值;

常见错误和陷阱:

*未声明、未初始化的变量和未使用的变量       *赋值时溢出 Integer.MAX_VALUE  Integer.MIN_VALUE

*取整错误                                                         *冗余的输入对象

3、变量的命名

Java变量命名规则

       首字母:字母、下划线、$    小写,其他首字母大写

       其他字母:字母、下划线、$和数字

       关键字:不能当变量名(53个)   

       String nickName;  //驼峰命名法                      class Person;  //帕斯卡命名法

注:变量名不要重复;一条语句可以声明多个同类型的变量:int i,j;见名知意;源代码文件名必须与公共类名相同

常量

在Java中常用关键字final指示常量,如:

public class Constants
{
    public static void main(String[] args)
    {
        final double CM_PER_INCH = 2.54;
        double paperWidth = 8.5;
        double paperHeught = 11;
        System.out.println("Paper size in centimeters:" 
           + paperWidth*CM_PER_INCH + "by" + paperHeight*CM_PER_INCH);
    }
}

关键字final表示这个变量只能被赋值一次,一旦被赋值,就不能再更改。习惯上常量名使用全大写。在Java中,常希望某个常量可以在一个类中的多个方法中使用,常称为类常量。

public class Constants
{
    public static final double CM_PER_INCH = 2.54;
    public static void main(String[] args)
    {
        double paperWidth = 8.5;
        double paperHeught = 11;
        System.out.println("Paper size in centimeters:" 
           + paperWidth*CM_PER_INCH + "by" + paperHeight*CM_PER_INCH);
    }
}

需要注意,类常量的定义位于main方法的外部。因此,在同一个类的其他方法中也可以使用这个常量。而且,如一个常量被声明为public,那么其他类的方法也可以使用这个常量。

字符串

    Java没有内置字符串类型,而是在标准java类库中提供了一个预定义类,即String。每个用双引号括起来的字符串都是String类的一个实例。

  • 子串

String类的 substring 方法可以从一个较大的字符串提取出一个子串。例:

String greeting = "Hello";
String s = greeting.substring(0,3);

创建了一个由“Hel”组成的字符串。substring 方法的第二个参数是不想复制的第一个位置,(0,3)复制的位置为0,1,2(从0到2,包括0和2)的字符。在substing中从0开始计数,直到3为止,但不包含3。.优点:易于计算子串长度,字符串s.substring(a,b)的长度为b-a。

  • 拼接

+ 号连接(拼接)两个字符串

String expletive = "Expletive";
String PG13 = "deleted";
String message = expletive + PG13;

上述代码将“Expletivedeleted”赋给变量message(注意,单词之间没有空格, + 号按照给定的次序将两个字符串拼接起来)。

    当将一个字符串与一个非字符串的值进行拼接时,后者将被转换成字符串(任何一个Java对象都可以转换成字符串)。

  • 不可变字符串

String类没有提供用于修改字符串的方法。。如希望将greeting的内容修改为“Help!”,不能直接地将greeting最后两个位置的字符修改为‘p’ 和‘!’。应先提取需要的字符,再拼接上替换的字符串:

greeting = greeting.sunstring(0,3) + "p!";   //将greeting当前值修改为“Helpl!”。

  • 检测字符串是否相等

    可以使用 equals 方法检测两个字符串是否相等。对于表达式:s.equals(t)   如果字符串 s 与 t 相等,则返回 true;否则,返回 false。需要注意,s 与 t 可以是字符串变量,也可以是字符串常量。例:“Hello”.equals(greeting) 。

    要想检测两个字符串是否相等而不区分大小写,可以使用 equalsIgnoreCase 方法。一定不能使用 == 运算符检测两个字符串是否相等!

  • 空串与Null串

空串“”是长度为0的字符串。可以调用 if(str.length() == 0 if(str.equals("")) 检查一个字符串是否为空。

Null表示目前没有任何对象与该变量关联,可以用 if(str == null) 检查字符串是否为null。

检查一个字符串既不是null也不是空串,需用条件 if(str != null && str.length() !=0)

  • 代码点与代码单元

length方法返回采用UTF-16编码表示的给定字符串所需要的代码单元数量,例:

String greeting = "Hello";
int n = greeting.length(); //is 5

要想得到实际的长度,即代码点数量,可调用:int cpCount = greeting.codePointCount(0,greeting.length());

调用 s.charAt(n) 将返回位置 n 的代码单元,n 介于0  ~ s.length() - 1之间。例:

char first = greeting.charAt(0);//first is 'H'
char last = greeting.charAt(4); //last is 'o'

要想得到第i个代码点,应使用:

int index = greeting.offsetByCodePoints(0, i);
int cp = greeting.codePointAt(index);

代码点:对应各种真正字符(char不是真正的字符,是代码单元)的Unicode编码,是指编码字符集中,字符所对应的数字。有效范围从U+0000到U+10FFFF。其中U+0000到U+FFFF为基本字符,U+10000到U+10FFFF为增补字符

代码单元:对代码点进行编码得到的1或2个16位序列(UTF-16)。其中基本字符的代码点直接用一个相同值的代码单元表示,增补字符的代码点用两个代码单元进行编码,编码值来自U+D800到U+DFFF,这个范围内没有数字用于表示字符,因此程序可以识别出当前字符是单单元基本字符,还是双单元增补字符

如果想要遍历一个字符串,并且依次查看每一个代码点,可以使用:

int cp = sentence.codePointAt(i);
if(Character.isSupplementaryCodePoinit(cp)) i +=2;
else i++;

实现回退操作:

i--;
if(Character.isSurrogate(sentence.charAt(i))) 
i--;
int cp = sentence.codePointAt(i);
  • 构建字符串

如果需要用许多小段的字符串构建一个字符串,首先构建一个空的字符串构建器:StringBuilder builder = new StringBuilder();

当每次需要添加一部分内容时,调用 append 方法。

builder.append(ch);//appends is a single character
builder.append(str);//appends a string

在需要构建字符串时调用 toString 方法,得到一个String 对象,包含构建器中的字符序列。String completedString = builder.toString();

 

 

 

 

 

你可能感兴趣的:(JAVA学习)