Java的基本程序结构设计

  • 一个简单的Java应用程序
  • 注释
  • 数据类型
  • 变量
  • 运算符
  • 字符串
  • 输入输出
  • 控制流程
  • 大数值
  • 数组

1.一个简单的Java应用程序
最简单的Java例子:

public class FirstSample{
	public static void main(){
		System.out.println("Hello World");
	}
}

逐一分析:

  1. 关键字public修饰,代表控制程序的其它部分队这段代码的访问级别。
  2. 关键字class表明Java程序中的全部内容都包含在类中。这里只需要将类作为一个加载程序逻辑的容器,程序逻辑定义了应用程序的行为。
  3. class后面紧跟类名。名字必须以字母开头,后面任意和字母与数字组合,类名规范首字母必须大写,需遵循驼峰命名,如:CaneCas。
  4. 源代码的文件名必须与公共类名相同,并以.java做为后缀名。
  5. 类的源文件必须包含一个main方法根据Java语言规范,main方法发必须声明为public,也可以将自定义的方法添加到类中。
  6. 用"{}"划分程序的各个部分,通常称为块,表示方法体的开始与结束。
  7. 这里使用了System.out对象调用方法“."用于调用方法

2.注释
长篇注释,即可以每行前面标记//,也可以使用/* */
文档注释:/** */
注:/* */不能嵌套

3.数据类型
在Java中一共有8种基本类型,其中4种整型、2种浮点类型、1种字符类型char和一种表示真假值的boolean类型。
在这里插入图片描述
4.变量与常量
变量:
在Java中,每个变量都有一个类型。在声明变量时,变量的类型位于变量前部。例:
int age;
double salary;
int i,j; //不提倡使用这种风格,逐一声明可以提高性能。
每个声明都已分号结束。
声明一个变量后,要对这个变量进行初始化,不然,Java编译器认为这样的语法是错误的,如:
int age;
System.out.println(age); //会报错
在Java中,变量的声明要尽可能的靠近第一次使用的地方,这是一种良好的程序编写风格。

常量
在Java中,利用final指示常量,例:
final double CM_PER_INCH=1.23;
利用final表示这个变量只能被赋值一次。一旦赋值后就不能在更改了。习惯上常量名使用全大写。
使用关键字static final修饰的常量为类常量,类常量位于main方法外部。如果一个常量被声明为public,例:
public static final double CM_PER_INCH=1.23;
那么其它类方法也可以使用这个常量。

5.运算符
在Java中,使用算术运算符+、-、*、/表示加减乘除运算。当参数与/运算的两个操作数都是整数时,表示整数除法;否则表示浮点除法。整数的求余操作用%表示,例如:15/7等于2,15%7等于1,15.0/2等于7.5。但整数被0除将会产生异常,而浮点数被0除将会得到无穷大或NaN。
Math类:

  • 计算一个数值的平方根,例: double x=4; double
    y=Math.sqrt(x); //sqrt方法处理的不是对象,是静态方法。
  • 幂运算,例: double y=Math.pow(x,a); //将y设置为x的a次幂。
  • 取余方法:floorMod(x,5);
  • 三角函数:Math.sin/Math.cos/Math.tan/Math.atan/Math.atan2
  • 指数:Math.exp
  • 反函数:Math.log
  • 以10为低的对数: Math.log10
  • 兀和e常量的近似值:Math.PI\Math.E

强制类型转换
例:double x=9.997;
int nx=(int)x;
nx结果为9。
int nb=(int)Math.round(x);
nx结果为10。其原因,round返回1结果为long类型,称此为显式的强制类型转换。

赋值运算
(=、*=、%=)
例:
x是int类型
x+=3.5;
是合法的,运算符的到一个值,其类型与左侧操作的类型不同,就会发生强制类型转换。转换格式:(int)(x+3.5)。
自增自减运算
n++;\n–;
5++;//不是一个合法语句
例:

int n=7;
int m=7;
int a=2*n++;		//a=14,n=8;
int b=2*++m;		//b=16,m=8

关系运算和boolean

==、<、>、<=、>=、!=
例:3==7;值为false

逻辑运算符
&&表示逻辑与,||表示逻辑或,!表示非。
三元运算符语法:?:

位运算符
处理整数类型时,可以直接对组成整型数值的各个位完成操作。位运算符包括:
&(“and”) ,|(“or”) ,^(“xor”) ,~(“not”)
">>和<<"表示左右移。需要建立位模式·来完成位掩码时,这两个运算符会很方便:
int ab=(n&(1<<3))>>3;
">>>运算符"会用0填充高位,这与>>不同,它会用符号位填充高位。不存在<<<运算符。
移位运算符的右操作要完成模32的运算(除非右操作数是long类型,在这种情况下需要对右操作数模64).例如,1<<35的值等同于1<<3或8。

运算符优先级
在这里插入图片描述
枚举类型
枚举类型包括有限个命名的值。
例:

enum Size {SMALL, MEDIUM, LARGE};
//声明类型
Size s= Size.MEDIUM;

6.字符串
概念上,Java字符串就是Unicode字符序列。例如:”Java\u2122"。Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,叫String。
关于String的方法:

  • 子串:substring。例
String grt="hello"
String s=grt.substring(0,3); --->hel
  • 拼接:可以使用“+”对字符串进行拼接。另一种使用静态join方法:String all=String.join("/",“s”,“m”);

  • 检测字符串是否相等:equals方法。表达式:s.equals(t),返回结果true或false。s和t可以是字符串变量也可以是字符串字面量。想忽略字母大小写,可以使用equalsIgnoreCase方法。一定不能用==运算符,当比较字符串常量才可以使用。

  • 空串与Null串:空串“ ”是长度为0的字符串。例:
    if(str.length()==0) 或if(str.equals(""))。
    空串是一个Java对象,有自己的串长度(0)和内容(空)。一般我们常常见到:
    if(str!=null && str.length()!=0)

  • Spring API(约50多个,这里列举一些常用的):
    char charAt(int index):返回给定位置的代码单元。
    int codePointAt(int index):返回从给定位置开始的码点。
    int offsetByCodePoints(int startIndex,int cpCount):返回从startIndex代码点开始,位移cpCount后的码点索引。
    int compareTo(String other):按照字典顺序,如果字符串位于other之前,返回负数,之后返回正数,相等返回0。
    IntStream codePoints():将这个字符串的码点作为一个流返回。调用toArray将它们放在同一个数组中。
    boolean equals(Object other):判断
    boolean startsWith(String prefix):判断字符串是否以prefix开头
    boolean endsWith(String suffix)
    int indexOf(String str)
    int indexOf(String str,int fromIndex)
    int indexOf(int cp)
    int indexOf(int cp,int fromIndex)
    返回与字符串str或代码点cp匹配的第一个字符串的开始位置。这个位置从索引0或fromIndex开始计算。如果在原始串中不存在str,返回-1。
    int lastIndexOf(Strring str)
    int lastIndexOf(String str,int fromIndex)
    int lastIndexOf(int cp)
    int indexOf(int cp,int fromIndex)
    返回与字符串str或代码点cp匹配的最后一个子串的开始位置。这个位置从原始串尾端或fromIndex开始计算。
    int length():返回字符串长度
    int codePointCount(int startIndex,int endIndex)
    返回startIndex到endIndex-1之间的代码点的数量
    String replace(CharSequence oldString,CharSequence newString)
    返回一个新字符串。这个字符串用newString代替原始字符串中所有的oldString。可以用String或StringBuffer对象作为CharSequence参数
    String substring(int beginIndex)
    String substring(int beginIndex,int endIndex)
    返回一个新的字符串,字符串选取从beginIndex到串尾endIndex-1的代码单元。
    String toLowerCase():大写字母改小写
    String toUpperCase(): 小写字母改大写
    String trim():去除头部和尾部的空格
    String join

  • 构建字符串StringBuilder
    一个空的字符串构造器:StringBuilder builder = new StringBuilder();
    方法:
    int length()单元数量
    StringBuilder append(String str):追加一个字符串并返回this
    StringBuilder append(char c):追加一个代码单元
    StringBuilder appendCodePoint(int cp)追加一个代码点,并将其返回一个或两个代码单元并返回this
    void setCharAt(int i,char c):将第i个代码单元设置为c
    StringBuilder insert(int offset,String str):在offset插入一个代码单元并返回this
    StringBuilder delete(int startIndex,int endIndex)删除偏移量从startIndex到endIndex-1的代码单元
    String toString()返回一个与构造器缓冲内容相同的字符串。

7.输入输出

  • 读取输入Scanner
    构造一个Scanner: Scanner in=new Scanner(System.in);
    方法:
    nextLine:输入一行 String name=in.nextLine();
    next:读取一个单词 String name=in.next();
    nextInt:读取一个整数 String name=in.nextInt();
    nextDouble:读取一个浮点数 String name=in.nextDouble();
    static Console console(),读取密码时用到。
    例:
Console cons = System.console();
String username=  cons.readLine("username:");
char[] passwd = cons.readPassword("password:");
  • 输出
    语句:System.out.print(123);
    格式化输出:System.out.print("%8.2f",x);
  • 文件输入与输出
    对文件读取:Scanner in new Scanner(Paths.get(“xx.text”),UTF-8);
    写入文件:PrintWriter out = new PrintWriter(“xx.text”);
    Scanner(File f) 构造一个从给定文件读取数据的Scanner。
    Scanner(String data) 构造一个从给定字符串读数据的Scanner。
    PrintWriter(String fileName) 构造一个将数据写入文件的PrintWriter。文件名由参数指定。
    static Path get(String pathname) 根据给定的路径构造一个Path。

8.控制流程

  • 块(block)作用域
    块(即复合语句)是指由一对大括号括起来的若干条简单的Java语句。块确定了变量的作用域。一个块可以嵌套在另一个块中。不能在嵌套的两个块中声明同名变量。
  • 条件语句
    Java中的条件语句的格式为if(condition) statement
    一般的条件语句格式为if(condition) statement else statement2。且else与最邻近的if配对
  • 循环
    while循环:当条件为true时,while循环执行一条语句。一般格式为while(condition) statement。如果开始的循环条件就为false,则while循环体一次也不执行。有些情况下需要使用先执行循环体,这时就应该使用do statement while (comdition)语法格式
    for循环:for循环语句是支持迭代的一种通用结构,利用每次迭代之后更新的计数器或类似的变量来控制迭代次数,是while语句的一种简单转化。
    语法:for(计数器初始化;循环条件;如何更新计时器){}
    例子:从n个数字中抽取k个数字
    n*(n-1)(n-2)(n-k+1)/123k用for语句表示:
    int x=1;
    for(int i=1;i<=k;i++)
    {x = x
    (n-i-1)/i;}
    for each循环: for(variable:collection) statement。表示循环遍历collection,常与数组集合连用。
  • 多重选择:switch语句

句式:switch(条件判断){case 1:

break;
case2:

break;

}
如果没有相匹配的case标签,就会选择default子句。如果分支结尾处没有break语句,那么会接着执行下一条语句,这种情况很危险。
case标签可以是:
类型为char、byte、short、或int的常量表达式。也可以是枚举常量。或字符串字面量。

  • break与continue的区别:
    break跳出当前循环方法,continue跳出当先循环语句执行后面的循环语句。

9.大数值
如果基本的整数和浮点数精度不能满足需求,那么可以使用java.math包中的两个很有用的类:BigInteger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值。
用法:BigInteger a= BigInteger.valueOf(100);
API方法:BigInteger add(BigInteger other)
BigInteger subtract(BigInteger other)
BigInteger divide(BigInteger other)

BigDecimal add(BigDecimal other)
BigDecimal subtract(BigDecimal other)

10.数组
数组是一种数据结构,用来存储同一类型值的集合。通过一个整型下标可以访问数组中的每一个值。
数组的声明:
int[] a; 或 int a[]; //这条语句只声明了变量a,并没有将a初始化为一个真正的数组。
int[] a=new int[100]; //这条语句创建了一个可以存储100个整数的数组。
创建一个数字数组时,所有元素初始化为0,boolean数组的元素会初始化为false,对象数组的元素会初始化为null。

  • 数组初始化及匿名数组
    创建数组对象并同时赋予初始值的形式 int[] x={1,2,3,4,5};
    初始化匿名数组: new int[]{1,2,3,4,5};
    x=int[]{1,2,3};是 int[] x={1,2,3,4}; x=x;的简写。
  • 数组的拷贝
    采用Arrays类的copyOf方法:
    例:int[] x=Arrays.copyOf(y,y.length);
    若表示为int[] x =Arrays.copyOf(y,2*y.length);
    多余的元素将被赋值为0。
  • 数组排序
    使用Arrays类中的sort,该方法让使用了优化后的快速排序算法。
    int[] a=new int[1000];

    Arrays.sort(a);
    类Arrays提供的API:
    toString(type[] a);返回包含A中数据元素的字符串。
    copyOf(type[] a, int length);复制
    copyOfRange(type[] a,int start, int end); 返回A类型相同的数组,并为其设置固定下标长度。
    sort(type[] a);排序
    binarySearch(type[] a,type v);
    binarySearch(type[] a, int start, int end, type v);采用二分搜索算法查找值v。如果查找成功,则返回相应的下表值;否则,返回一个负数值r。
    fill(type[] a, type v);将数组中所有数据设置为类型v。
    equals(type[] a,type[] b);判断两个数组是否相同。
  • 多维数组
    多维数组将使用多个下标访问数组元素,它适用于表示表格或更加复杂的排列形式。
    在Java中声明一个二维数组:double[][] x;可以这样对它初始化:x=new double[][];
    如果知道数组元素就可以不调用new,例如:
    int[][] x={{1,2,3},{2,4,1}};
    对于for each循环语句是按照行来处理的,也就是一维数组来处理的。对于二维数组可以有下面例子:
    for(double[] raw : a)
    for(double value: row)
    do something wit value
    想要打印一个二维数组的数据元素列表,可以调用:
    System.out.println(Arrays.deepToString(a));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值