JAVA的基本程序结构

第一个Java程序(示例)

public class NewStudy {
    public static void main(String[] args) {
        System.out.println("First Java: Hello World");
    }
}

注释

写注释的目的很明确 就是让人能看懂这么一大串代码是干啥的,最起码能让自己看懂,因为说不准不知道时隔多久你在看到这段代码,你能一下明白他的意思。

写注释不仅是对效率的提升更多的也是对代码的一种负责吧

数据类型

Java是一种强类型语言。所以也就意味着每个每个变量都需要声明类型,一共有8种基本类型

整型

int4字节
- 2 147 483 648 - 2 147 483 647
short2字节-32768 - 32767
long8字节
- 9 223 372 036 854 775 8 08  -   9 223 372 036 854 775 807
byte1字节-128 - 127
  1. 通常情况下 int最常用
  2. 长整型数值有后缀L或l (如4000000L)  十六进制数值有前缀0x或0X
  3. 从Java7开始 加上前缀0b或0B就可以写二进制数。如0b1001 就是9

浮点型 

float4字节
大约 ± 3.402 823 47 E + 38 F ( 有效位数为 6 ~ 7 位)
double8字节
大约 ± 1.797 693 134 862 315 70 E + 308 ( 有效位数为 15 >
  1. double的数值精度是float的2倍。绝大部分程序都采用double类型
  2. float类型的数值有一个后缀F或f。没有后缀的默认为double类型,当然也可以在浮点数值后面添加后缀D或d
  3. 所有的浮点型计算都遵从IEEE 754规范
  4. 浮点数值不适用于无法接受舍入误差的金融计算中

char类型 

建议在程序中不要使用char类型,最好将字符串作为抽象数据类型处理

boolean类型

boolean类型有两个值: false和true,用来判断逻辑条件。

整型和布尔型之间不能相互进行转换

变量

  • 每个变量都有一个类型。在声明变量的时候,变量类型位于变量名之前
  • 声明一个变量之后 必须用赋值语句对变量进行显式初始化,不要使用未初始化的变量。变量的声明尽可能的靠近变量第一次使用的地方
  • 用关键字final指示常量。关键字final表示这个变量只能被赋值一次,一旦赋值就不能更改了。习惯上,常量名使用全大写。例如:
    final double PI = 3.14;

运算符

在JAVA中+、-、*、/分别代表加减乘除的运算符。其中当参与/的两个数都是整型时,表示整数除法,否则,表示浮点除法。整数除余用运算符%来表示

例如: 15/2 = 7         15%2 = 1         15.0/2 = 7.5

整数除0会得到一个异常,而浮点数将会得到无穷大或NaN的结果

数学函数与常量

各种各样的数学函数 包含在了Math类中        例如

  • 想计算一个数的平方根,就可以用sqrt()方法
  • 想进行幂运算就用pow()方法  double y = Math.pow(x,a)  即y的值为x的a次幂

数值类型之间的转换 

        当2个数值进行运算时,需要将两个数转换为同一数据类型后再进行运算(例如: n+f n为整数,f为浮点数)

  • 如果两个操作数中有一个是 double 类型另一个操作数就会转换为 double 类型
  • 如果其中一个操作数是 float 类型另一个操作数将会转换为 float 类型
  • 如果其中一个操作数是 long 类型另一个操作数将会转换为 long 类型
  • 如果不是,则两个操作数都将被转换为int 类型

强制类型转换 

         上一张图可以看到,在必要的时候,int型将自动转换成double型。但是在某些时候也同样需要将doube类型转换成int型。而在JAVA中是允许这些转换的(可能丢失一些信息)

        强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变 量名。例如

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

double x = 9.997;
int nx = (int)Math.round(x);

上面的类型转换后的结果为9,强制类型转换会通过截断小数部分将浮点型转换成整型。

因此为了得到最接近的整数,就会使用round()方法,此方法会把数字转化为long类型,因此同样需要int的强制转换

如果使用强制类型转换数值,而数值又超过了目标类型的表示范围,结果就会不同。例如 :(byte)300 = 44

自增自减运算符

在表达式中,前缀自增自减会先完成+1   而后缀自增自减会使用变量之前的值

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

枚举

有时,变量的取值只在一个有限的集合里面。针对这种情况,可以自定义枚举类型

enum Size { SMALL, MEDIUM, LARGE, EXTRA.LARCE };

字符串

        从概念上讲,Java字符串就是Unicode字符序列。Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,很自然的叫做String

        String类没有提供用于修改字符串的方法

子串

        String类的substring()方法可以从一个大的字符串中提取出一个子串

String a = "Hello";
String b = a.substring(0,3); // "Hel"

字符串a.substring(a,b)的长度为b-a。

拼接

JAVA允许使用+号连接两个字符串(+号按照给定的次序将两个字符串拼接起来)

当一个字符串与一个非字符串的值进行拼接时,后者将会被转换为字符串

检测字符串是否相等

可以使用equals方法检测两个字符串是否相等。对于表达式s.equals(t) 如果字符串s与字符串t相等就返回true否则就返回false

要想检测两个字符串是否相等, 而不区分大小写 可以使用 equalsIgnoreCase 方法

不要使用"=="来检测两个字符串是否相等。这个只能确定两个字符串是否放置在同一个位置上

阅读API文档 

标准库中有几千个类,方法更多,靠人脑根本记不住,所以需要学会使用API文档,从这里面可以找到标准类库中的方法和类,API文档是JDK的一部分;HTML格式。让浏览器指向安装 JDK docs/api/index.html 子目录

StringBuilder

在JDK5.0中引入了StringBuilder类,这个类的前身是StringBuffer,它的效率稍有些低,但是允许采用多线程的方式执行插入或删除字符串的操作。如果所有字符串都在一个单线程中编辑,则应该用StringBuffer替代它。两个类的API是相同的

输入输出

import java.util.Scanner;

public class SystemIn {
    public static void main(String[] args) {
        /*
        1.首先 需要构建一个Scanner对象,并与标准输入流关联
        2.nextLine方法 输入一行内容。如果仅仅只是一个单词,那么也可以用next方法
        3.获取整数用nextInt方法。同理,浮点数则是用nextDouble方法
         */
        Scanner scanner = new Scanner(System.in);
        System.out.println("what is your name");
        String name = scanner.nextLine();
        System.out.println("how old are you");
        int age = scanner.nextInt();
        System.out.println("hello my name is "+name+" and my age is "+age);
    }
}

        因为Scanner输入是可见的,因此在JAVA SE 6特别引入了Console

        采用 Console 对象处理输入不如采用 Scanner 方便。每次只能读取一行输入, 而没有能够读取一个单词或一个数值的方法

块作用域

        块(复合语句)是指由一对大括号包含起来的若干简单JAVA语句。块确定了变量的作用域。一个块可以嵌套在一个块中。但是不能在嵌套的两个块中声明同名的变量

数组

数组是一种数据结构,用来储存同一类型值的集合。通过一个整型下标可以访问数组的每一个值

创建一个数字数组的时候,所有元素都初始化为0。Boolean数组的元素全初始化为false。对象数组的元素初始化为一个特殊值NULL,这表示这些元素还没有存放任何对象。

注意点:

  • 如果创建了一个大小为100的数组,那么如果访问超过这个大小之外的下标数组,则会引发"array index out of bounds"的异常而终止执行
  • 一旦创建了数组,就不能再改变它的大小了 

数组拷贝 

        使用Arrays类中的copyOf方法。其中第一个参数是原数组名,第二个参数是新数组的长度。如果数组元素是数值型,那么多余的元素将被赋值为0;如果数值是布尔型,将赋值为false。相反,如果长度小于原始数组的大小,则只拷贝最前面的数据元素。

int[] arrayOne = {1,2,3,4,5};
int[] arrayTwo = Arrays.copyOf(arrayOne,arrayOne.length);

数组排序

        使用Arrays类中的sort方法就可以对数值型数组进行排序

//从n位观众中抽取m名幸运观众赠予奖品

import java.util.Arrays;
import java.util.Scanner;

/**
 1.创建2个数组分别用于储存总观众的下标及幸运观众的下标
 2.从n个观众中随机m名观众
 3.必须确保不会重复抽到
 4.将抽出的序号进行排序
 * @author wangzhixiang
 */
public class LuckyGame {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("How many people your want?");
        int n = scanner.nextInt();
        System.out.println("How many people will be lucky?");
        int m = scanner.nextInt();
        int[] people = new int[n];
        //将总人数一一赋值
        for (int i = 0; i < people.length; i++) {
            people[i] = i+1;
        }
        int[] lucky = new int[m];
        for (int i = 0; i < lucky.length; i++) {
            int r = (int) (Math.random()*n);
            lucky[i] = people[r];
            //确保不会再抽到那个值
            people[r] = people[n-1];
            n--;
        }
        Arrays.sort(lucky);
        for(int r : lucky){
            System.out.println(r);
        }

    }
}

参考文献 : 《JAVA核心技术 卷一》

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值