初学Java------Java的基本程序设计结构

简介: public是关键字,称为访问修饰符,用于控制程序的其他部分对这段代码的访问级别。

1.一个简单的Java应用程序

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


这个程序虽然简单,但是基本上所有的Java程序都是具有这种结构的。


下面逐一看这几行代码:


public是关键字,称为访问修饰符,用于控制程序的其他部分对这段代码的访问级别。


关键字class说明Java程序中的全部内容都包含在类中。


class后紧跟类名。类名采用大驼峰的命名方式,所有单词的首字母必须大写,但是不能使用Java保留字(public ,class等)作类名。例如:FirstSample就是一个合法的命名。


源代码的{ }划分程序的各个部分(通常称为块),任何方法的代码用 { 开始,用 } 结束。


我们先不用管static void ,暂时把它们当作编译程序的必要部分。每个程序都必须有一个main方法。格式如下:

public class OneBlogs {
    public static void main(String[] args) {
        program statements
    }
}


下来看这个代码:

{
        System.out.println("Hello world!");
    }

 

一对大括号表示方法体的开始与结束,使用System.out对象调用它的println方法。注意:"."用于调用方法。Java使用的通用语法是object.method(parameters),这等价于函数调用。


2.注释

Java中有三种表示注释的方法:


1. // 注释内容从//开始到本行行尾      2. /*    */注释界定符将一段较长的注释括起来


3.这种注释可以用来自动生成文档,/**       */


警告:Java中注释不能嵌套。


3.数据类型

Java是一种强类型语言,必须为每一个变量声明一种类型。Java中一共有8中基本类型,其中包括4种整型,2种浮点类型,1种字符类型char(用于表示Unicode编码的代码单元),1种表示真值的布尔类型boolean。

数据类型 关键字 内存占用 范围
字节型 byte 1字节 -128~127
短整型 short 2字节 -32768~32767
整型 int 4字节 -2^31~2^31-1
长整型 long 8字节 -2^63~2^63-1
单精度浮点数 float 4字节
双精度浮点数 double 8字节
字符型 char 2字节 0~65535
布尔型 boolean 没有明确规定

true和false


注意:


·不论是16位系统还是32位系统int都占4个字节。不论是32位系统还是64位系统long占8字节


·整型和浮点型都是带有符号的


·整型默认为int型,浮点型默认为double型


什么是字节?字节是计算机中表示空间大小的基本单位


4.变量与常量

4.1 声明变量

格式:数据类型   变量名        例:

int age;
double salary;
long earthPopulation;
boolean done;


从中可以看出,每个声明都以分号结束。声明是一条完整的语句,分号在这里是必须加的。


tip:$是一个合法的Java字符,但是不要在代码中使用这个字符,它只在Java编译器或其他工具生成的名字中。


可以在一行中声明多个变量:

int i ,j, k;       //不提倡这种风格
逐一声明每个变量提高代码的可读性。


4.2 变量初始化

声明一个变量后必须使用赋值语句对变量进行显式初始化。不能使用未初始化的变量。


否则:

public static void main(String[] args) {
        int i;
        System.out.println(i);
    }


这段代码会出现如下错误:


要想对一个声明过的变量赋值就得把变量名放在 = 左边,值或者表达式放在 = 右边,例:

int age;
age = 10000;
int month;
month = 8;
int week = 6;

tip:在Java中,变量声明尽量靠近第一次使用的地方,这是一个比较好的编程习惯


4.3 常量

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

public static void main(String[] args) {
       final double P_I_E = 3.14;
        System.out.println(P_I_E);
    }


tip : final表示的这个变量只能被赋值一次,一旦被赋值便不能再更改,习惯上,常量名全大写。


还有一种常量被称为类常量,这个常量可以在一个类的多个方法中使用,可以使用 static final 设置一个类常量,例如:

static final double P_I_E = 3.14;
    public static void main(String[] args) {
        System.out.println(P_I_E);
    }


注意:类常量定义于类方法的外部。


5.运算符

运算符用于连接值


5.1 算术运算符

+ - * / 分别表示加 减 乘 除运算。


整数的取余操作符用 % 表示。例:15 % 7 == 1


当参与 / 运算的两个操作数都是整数,表示整数除法,否则表示浮点除法。


例:15 / 2 ==7 ;15 / 2.0 == 7.5


5.2 数学函数与常量

在Math类中包含了各种各样的数学函数,使用前加上这样一句代码:

import static java.lang.Math.*;


sqrt :计算一个数的平方根 ,例:

import static java.lang.Math.*;
public class OneBlogs {
    public static void main(String[] args) {
        double a = 25;
        double b = sqrt(a);
        System.out.println(b);
    }
}


Math类中的sqrt方法不处理任何对象,这样的方法称为静态方法。


pow:表示幂运算 ,格式:pow(a , k)表示a的k次幂,例:

public static void main(String[] args) {
        double a = 2;
        double b = 3;
        double c = pow(a,b);
        System.out.println(c);
    }


Java还提供两个用于表示 π 和 e 常量最接近的近似值:Math.PI       Math.E


5.3 数值类型之间的转换

微信图片_20221028183704.jpg


图中有箭头实线表示无数据丢失的转换,无箭头的实线表示有数据丢失的转换


Java中,当使用一个二元运算符连接两个值时,会先将两个操作数转换成同一种类型,再计算。


·有一个操作数是double类型,另一个也会转换成double类型


·有一个操作数是float类型,另一个也会转换成float类型


·有一个操作数是long类型,另一个也会转换成long类型


·否则其余都将转换成int类型


5.4 强制类型转换

上面提到必要时,int会转换为double类型,Java中允许经过强制类型转换将double转换为int,例:

double a = 3.5678;
int b = (int) a;


这样经过上述代码 b的值为3,因为强制类型转换通过截断小数部分将浮点值转化为整型。


如果想对浮点数进行舍入运算,得到最接近的整数,就需要Math.round方法,例:

double a = 9.999;
int b = (int) Math.round(a);


注意:round方法的返回值为long类型,所以必须使用强制类型转换(int)。


5.5 结合赋值和运算符

+=    -=     *=     /=    %=    


例:a+=2   等价于  a=a+2


如果运算得到一个值与左侧操作数类型不同,就会发生强制类型转换,例:

int a;      //a是int类型
a+=2.2;     //是合法的等价于(int)(a+2.2)


5.6 自增自减运算符

++     --


i++与++i的结果都会使i进行加1,但它俩的区别主要在给表达式赋值的地方体现,例:

int i = 1;
int a = ++i;      //先进行++再给a赋值,所以a是2
int b = i++;      //先赋值再进行++,所以b还是1
--  与  ++一样


5.7 逻辑运算符

逻辑与:&&      逻辑或:||      逻辑非:!   这三个运算结果都是boolean类型,true或false


表达式1 && 表达式2,如果有一个表达式为假,结果就为假


表达式1 || 表达式2,如果有一个表达式为真,结果就为真


逻辑非!,假变真,真变假


5.8 位运算符

按位与 &:如果两个二进制位都是1,则结果为1,否则结果为0


1 0 1 1 0 1 0 1

1 1 0 0 1 1 0 1

1 0 0 0 0 1 0 1

按位或 |:如果两个二进制为都为0则结果为0,否则结果为1


按位取反 ~:如果该位为0则变为1,该位为1,则变为0


按位异或 ^:如果两个二进制位相同结果为0,不同为1


5.9 移位运算

左移<<:最左侧位不要了,右边补0


右移>>:最右侧位不要了,左边补符号位(正数补0,负数补1)


无符号右移>>>:最右侧位不要了,左侧补0


5.10 条件运算符

条件运算符也是Java中唯一一个三目运算符


表达式1?表达式2:表达式3          表达式1结果为真,则结果为表达式2,否则,为表达式3


代码示例:得到两个数的最大值 :

public static void main(String[] args) {
       int a = 12;
       int b = 23;
       int max = a > b ? a : b;
        System.out.println(max);
    }


6.字符串

从概念上Java字符串就是Unicode字符序列。Java没有内置的字符串类型,而是在Java类库中提供了一个预定义类,叫作String。用双引号括起来的字符串都是String类的实例:

String a = " ";
String names = "huanghe";


6.1 子串

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

String str = "hello world";
String str1 = str.substring(0,3);   //会创建"hel"这个字符串


注意:在substring中从0开始计数,这里从0开始到3结束(不包括3),也就是复制位置0,1,2


优点:容易计算子串的长度,上述例子中子串的长度为3-0=3。


6.2 拼接

Java允许使用 “+” 连接两个字符串,例:

String str1 = "hello";
String str2 = "world";
String str3 = str1 + str2;   //str3 = "helloworld"


注意:单词之间没有空格,+号完全按照给定的次序将两个字符串拼接起来。


这种特性常常用于输出语句中,例:

System.out.println("your name is"+name);


6.3 检测字符串是否相等

使用equals方法检测两个字符串是否相等,格式:str1.equals(str2)   , 其结果是布尔类型,可以定义一个布尔类型的变量接收结果,例:

public class OneBlogs {
    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = "world";
        String str3 = "hello";
        boolean a = str1.equals(str3);
        System.out.println(a);
    }
}


运行结果:

微信图片_20221028184100.jpg

6.4 空串与Null串

空串" "是字符长度为0的字符串,可以调用以下代码检查一个字符串是否为空串

if (str.length()==0) 或者 if(str.equals(""))


String还可以存放一个特殊值为null,表示目前没有任何对象与该变量关联,检查一个字符串是否为null使用如下代码:

if( str == null )


7.输入与输出

7.1 从键盘输入

使用Scanner读取字符串,整数,浮点数


首先需要导入util包:import java .util .Scanner;


还需构造一个与“标准输入流”System.in关联的Scanner对象:


Scanner sc = new Scanner(System.in);


例:

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String name = sc.nextLine();
        System.out.println(name);
    }

如果想要读取一个整数,可以调用nextInt 方法(这种用的最多)例:

Scanner sc = new Scanner(System.in);
        int age = sc.nextInt();


7.2 输出

在这里介绍三种输出方法:

int age = 20;
 System.out.println(age);      //第一种:输出自动换行
 System.out.print(age);        //第二种:输出不换行
 System.out.printf("%d",age);  //第三种:格式化输出


格式说明符尾部的转换符指示要格式化的数值的类型:f表示浮点数,s表示字符串,d表示十进制数。


8.程序逻辑控制

8.1 if 语句

语法格式1:

if(布尔表达式){
          语句
      }


如果布尔表达式结果为true,执行大括号中的语句,否则不执行。


语法格式2:

if(布尔表达式){
          语句1;
      }else{
          语句2;
      }


如果布尔表达式结果为true执行语句1,否则执行语句2。


语法格式3:

if(布尔表达式1){
          语句1;
      }else if(布尔表达式2){
          语句2;
      }else{
          语句3;
        }


表达式1成立执行语句1,表达式2成立执行语句2,否则执行语句3。


注意:if else 语句中可以不加大括号,但是只能写一条语句(不建议这样使用),else与和它最近的 if 相匹配。实际开放中建议加上大括号。


8.2 switch语句

基本语法:

switch(表达式){
         case 1:
             语句1;
             break;
         case 2:
             语句2;
             break;
         case 3:
             语句3;
             break;
         ......
         default:
            不满足执行此语句;
            break;
     }


执行流程:先计算表达式的值,然后与case比较,有对应的就执行对应的语句,遇到break结束,当表达式的值没有与之对应,就执行default下面的语句。


注意事项:· 多个case后的常量不可以重复


                 · switch的括号内只能是以下类型的表达式:


                                  基本类型:byte,char,short,int


                                  引用类型:String常量串,枚举类型


                  ·break不要遗漏,否则会失去“多分支选择”的效果


                  ·switch 虽然支持嵌套,但是不推荐


8.3 循环结构

8.3.1 while循环

语法格式:

while(循环条件){
            循环语句;
        }


循环条件为true,执行循环语句,否则结束循环


代码实例:计算1-100的和:

public class OneBlogs {
    public static void main(String[] args) {
        int sum = 0;
        int n = 1;
        while(n<=100){
            sum+=n;
            n++;
        }
        System.out.println(sum);
    }
}


  注意事项:while下面的语句可以不写{},但只能写一条语句,建议加上{}


                    while后面的 { 建议和while写在同一行


                    while后面不要多写分号,否则导致循环不能正确执行    


8.3.2 do while 循环

语法格式:

do{
          循环语句;
      }while(循环条件);

先执行循环语句,在判定循环条件,循环条件成立继续执行,否则循环结束


注意:while后面要加上分号


代码实例:打印1-10:

public class OneBlogs {
    public static void main(String[] args) {
        int i = 1;
      do{
          System.out.println(i);
          i++;
      }while(i<=10);
    }
}


8.3.3 for循环

基本语法:

for(表达式1;布尔表达式2;表达式3){
           循环语句;
        }


· 表达式1:用于初始化循环变量的初始值设置,再循环的最开始,只执行一次


· 布尔表达式2:循环条件,满足循环继续,否则循环结束


· 表达式3:循环变量的更新方式


代码示例:打印1-10:

public class OneBlogs {
    public static void main(String[] args) {
      for(int i=1;i<=10;i++){
          System.out.print(i+" ");
      }
    }
    }


注意事项:·for下面的语句可以不加{},但是只能执行一条语句,建议加上


                 ·for后面的 { 建议写在同一行


                 ·for后面不要多写分号,否则导致循环不能正确执行


9.break与continue的区别

break:break语句是终止整个循环,不会再去判断循环条件是否满足


continue:continue是只终止本次循环,不是终止整个循环


举一个打印1-5的例子体会以下用法:


continue:

public class OneBlogs {
    public static void main(String[] args) {
        for(int i=1;i<=5;i++){
            if(i==3){
                continue;
            }
            System.out.println(i);
        }
    }
}


打印结果:

微信图片_20221028184551.jpg

           

break:

public class OneBlogs {
    public static void main(String[] args) {
        for(int i=1;i<=5;i++){
            if(i==3){
                break;
            }
            System.out.println(i);
        }
    }
}


打印结果:

微信图片_20221028184626.jpg

相关文章
|
26天前
|
Java 测试技术 开发者
💡Java 零基础:彻底掌握 for 循环,打造高效程序设计
【10月更文挑战第15天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
109 63
|
30天前
|
存储 算法 Java
🚀Java零基础-顺序结构详解 🚀
【10月更文挑战第11天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
34 6
|
4月前
|
存储 算法 安全
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
71 0
|
1月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
42 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
3月前
|
存储 Java 数据库连接
Java类文件结构及类加载机制
该文章主要讨论了Java类文件的结构以及Java类的加载机制,并提到了双亲委派模型的相关内容。
Java类文件结构及类加载机制
|
3月前
|
Java
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
|
3月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
|
3月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
|
3月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
|
3月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之dal层中的mapper数据源类型进行组织的问题如何解决
Java应用结构规范问题之dal层中的mapper数据源类型进行组织的问题如何解决