Java的基本程序设计

一个简单的Java程序

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

这就是一个简单的Hello,Word!程序,所有的Java程序都是这个结构,所以先来仔细的分析一下这段代码

public访问修饰符,用于控制程序中其他部分对这部分代码的访问级别

class表明Java程序的所有内容都包含在类中,可以理解为程序逻辑的一个容器

class的后面紧跟着是类名,类名必须是字母开头,后面跟字母和数字的任意组合,长度不限但不能于保留字冲突

源代码的文件名必须与公共类名字相同,并且扩展名是.jaja,如果没有编译错误,编译器会编译出包含这个类的字节码文件.class

Java虚拟机在执行一个类时总是从main方法开始执行,所以类的源文件中必须包含一个main方法,根据Java语言规范main必须声明为public

Java中所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块。

Java中也和c语言一样用{}来划分程序的各个部分

对于这个方法,只有一条语句,我们使用了Systeam.out对象并调用了他的方法println,点号用于调用方法。Java的通用方法是

object.method(parameters)

这等价于函数调用

Java中的方法可以有一个或多个参数,也可以没有参数但括号不能省略

注释

Java中注释和c++相同,单行注释//,多行注释/**/

数据类型

Java是强类型语言,即每个变量都有类型。

整形

类型 存储需求 取值范围
int 4B [-2147483648,-2147483648](刚刚20亿)
short 2B [-32768,32767]
long 8B [-9223372036854775808,9223372036854775807]
byte 1B [-128,127]

因为Java是在Java虚拟机上运行,所以取值范围与平台无关

注意Java没有任何无符号整型

普通的数字就是intlong有一个后缀lL(如4000000000L)

十六进制有前缀0x0X,八进制有前缀0

Java7之后就有了,二进制前缀0b0B,同时也可以在数字中插入下划线1_000_000_000,编译时编译器会自动去掉

浮点型

类型 存储需求 取值范围
float 4B 大约6到7位
double 8B 大约15位

同时有三个常数表示溢出或出错

  • 正无穷大Double.POSITIVE_INFINITY
  • 负无穷大Double.NEGATIVE_INFINITY
  • 不是一个数Double.NaN

char型

char型用于表示单个字符,通常是占16位,当有些字符需要消耗两个char

char采用的是Unicode编码,Unicode前128位于ASCll相同

boolean型

boolean布尔型只有两个值falsetrue,并且布尔型不能像c++中那样用0/1表示,也不能于整型转换

变量与常量

声明变量

在Java中每一个变量都要有一个类型(type)

double a;
int b;
long c;
boolean d;

所有的Java语句都必须以分号结尾,而声明也是一个语句

Java的变量必须是以字母开头由字母和数字构成的序列,但是Java的字母不只是英文字母,Unicode中的字母都可以。保留字也不能作为变量名

int i , j;

Java也可以的一行多个变量

变量初始化

Java声明变量后必须以赋值语句对其初始化

int a;
a = 12;

同时写在一行中也是合法的

int a = 12;

Java的声明语句可以放在程序的任意位置,但是不能使用未初始化的变量

int a;
System.out.println(a);

这样的会被编译器当成是错误的语句

在Java 10之后,如果可以通过变量的初始值推断出变量类型可以不声明类型,用var即可

var a = 12; // a is an int
var b = "abc"; // b is a String

常量

在Java中定义常量只需要加上final 即可

final double PI = 3.1415926;

常量只能被赋值一次,且赋值后不能更改。习惯上常量名用全大写。

Java中如果希望某个常量在一个类的多个方法中使用可以声明类常量(class constant)

public class testcode{    static final double PI = 3.14159;	public static final int a = 10;    public static void main(String[] args)    {        double d = 10;        System.out.println( PI * d );    }}

这里的PI就是一个类常量,如果希望一个一个类可以在其他的类的方法中被使用,可以声明为public如这里的a

尽管const是Java的是保留字,但是并没有被使用。想要声明常量只能用final

枚举类型

如果变量的取值在一个固定的范围中,例如衣服的尺码只有S,M,L,XL四种。针对这种情况我们可以自定义枚举类型

enum Size { S , M , L , XL };

现在可以声明这种类型的变量

Size s = Size.M;

Size类型的变量只能存储这个类型声明中给定的值或nullnull表示没有设置任何值

运算符

算数运算符

Java中的算数运算符有+,-,*,/,%,整体和c++类似,特别的对于/两个数都是整型则为整型除法,否则均为浮点数除法

数学函数与常量

Math类中包含了许多的函数,比如开方Math.sqrt(x)和幂运算Math.pow(x,y)

还用常用的三角函数

Math.sin(x);Math.cos(x);Math.tan(x);math.atan(x);math.atan2(x);

还有指数函数,以自然对数为底、以十为底的对数函数

Math.exp(x);Math.log(x);Math.log10(x);

还用两个常量\(\pi\)\(e\),注意这里只是与之最接近的近似值并非准确值

Math.PI;Math.E;

其实并不用每句话有加上Math.,还可以采用静态导入的方法在程序的源文件顶部加上

import static java.lang.Math.*;

数值类型的转换

以下六个箭头代表无信息丢失的转换

graph TD; short --> int byte -->short char --> int int --> long int --> double float --> double

以下三个箭头代表可能有精度丢失的转换

graph TD; int -->float long --> float long --> double

若没有箭头则无法进行转换

强制类型转换

当需要转换数据类型的时候可以进行强制类型转换,这点和c++类似

double x = 9.997;int y = (int) x;

这样得到的y值是的值就是9

但是有些时候我们还需要进行四舍五入,这样可以用

double x 9.997;int y = (int) Math.rand(x);

这样y的值就是10,当调用rand方法时依然需要进行强制类型转换,因为rand方法的返回值时lang类型

无论如何都不要将boolean与其他类型进行强制类型转换,若确实需要可以用三目运算符b?1:0

组合赋值和运算符

x+=4等价于x = x + 4,如果左右的数据类型不同就会发生强制类型转换,如果xint类型x += 3等价于x = (int) (x + 3.5)

自增自减运算符

c++的运算符基本相同,既有前缀也有后缀两种

关系和boolean运算符

Java包含丰富的关系运算符,要检测相等可以用==,同样不等也可以用!=,整体上来说Java沿用了c++的模式>,<,>=,<=都相同

还有逻辑与$$和逻辑或||,有点不同的是逻辑运算符采用”短路“的模式,x!=0&&x>0如果x是非零数,那么前半部分就已经判断出答案为假就不在继续判断了

特别的以上几种运算符返回值全部是truefalse

最后一点,Java支持三元运算符,x?1:2,其中x成立返回1否则返回2

位运算符

在Java中有四种位运算符

$(and)|(or)^(xor)~(not)

同时还有<<左移、>>右移,还有一种特殊的运算符是>>>也是左移,与>>不同的是他是用0来填充高位,而>>是用符号位来填充

优先级和括号

Java的优先级和c++基本相同,也可以用()[]来调整运算优先级,值得注意的是,在java中不是运算符

字符串

Java中没有字符串,但是Java预制了字符串类,就是Unicode字符序列,字符串要用双引号括起来

String s = "Hello";

子串

字符串可以进行截取字符串,填入的是一个左闭右开的区间

String x = "Hello";String y = x.substring(0,3);// y is "Hel"

拼接

java语言也支持对字符串进行拼接,通常来说拼接可以用+

String a = "Hello";String b = "Word";String c = a+b;// c is "HelloWord"

这里拼接后两个单词之间是没有空格的

Java中也可以将非字符串和字符串进行拼接,拼接后还是字符串,Java中任何对象都可以转换成字符串

String a = "age is ";int b = 18;String c = a+b;// c is "age is 18"

如果要把多个字符串拼接并用界定符分隔可以用join方法

String a = String.join( "/" , "S" , "M" , "L" , "XL");// a is "S/M/L/XL"

Java11之后还如果重复一个字符串还有repeat

String a = "Java".repeat(3);// a is "JavaJavaJava"

不可变字符串

在Java中字符串是无法进行修改的,如果确实需要修改可以先截取在拼接的方式

String a = "abcd";a = a.substring(0,2) + 'o' + a.substring(2,4);// a is "abocd"

判断相等

可以用equals的方式来判断,例如a.equals(b),他的返回值是boolean类型

如果忽略大小写可以用a.equalsIgnoreCase(b)来判断

在Java中不能==来判断,因为==判断的是两个字符串放在同一个位置,因为Java中String 的实现是类似与c++中的char * 指针

构建字符串

如果需要用多个较短的字符串构建一个较长的字符串可以用字符串构建器

StringBuilder builder = new StringBuilder();builder.append('a');builder.append("bc");builder.append(12);String s = builder.toString();// s is "abc12"

输入与输出

读取输入

首先我们要引入Scanner类

import java.util.Scanner;

想要读取“标准输入流”,也就是从控制台读入,首先要新建一个与System.in关联的Scanner对象

Scanner in = new Scanner(System.in);

然后就可以进行读取了

String a = in.nextLine();//读入一行
String b = in.next();//读入一个字符串
int c = in.nextInt();//读入一个整型
double d = in.nextDouble();//读入一个浮点型

除了读入还有以下几个方法,他们的返回值是boolean型用于判断后面还有没有数据

hasNext();hasNextInt();hasNextDouble();

格式化输出

正常情况下可以用System.out类总的print方法输出

从Java5之后沿用了c语言总的printf方法可以进行格式化输出

double a = 123.45678;System.out.printf("%6.2f\n",a);// 123.46

用格式化输出也可同时输出多个常数

常用的转义字符有

d十进制整数,x十六进制整数,o八进制整数,f浮点数,e指数浮点数,s字符串,c字符,b布尔

同时嗨哟不同的标记符号

+打印正负号,0增加前导零,-左对齐,(将负数用括号括起来

同时也可以用String.format创建格式化的字符串

String s = String.format("%6.2",a);

控制流程

条件语句

Java总的if语句的应用基本和c语言总一致,既可以用{}嵌套代码块,也可以只跟一个语句

if( a > 0 )
{    
	System.out.println("+");
}
else if( a < 0 )
{    
	System.out.println("-");
}
else System.out.println("0");

循环

循环语句也是很类似c语言,while(condition)statementdo statement while(condition)两种循环

确定循环

也就是c语言总的for循环,实际上用起来也是非常的类似

for( int i = 1 ; i <= 10 ; i ++ )
	Systeam.out.println(i);

三个部分也分别是初始化、检查、更新

多重选择

其实就是switch语句,和c语言的基本没差别

switch (a)
{
    case 1:
        System.out.println(1);
        break;
    case 2:
        System.out.println(2);
    default:
        System.out.println("other");
        break;
}
posted @ 2022-02-20 19:43  PHarr  阅读(201)  评论(0编辑  收藏  举报