2019-06-22 Java学习笔记之Java基础

最近在Web安全中的代码审计方面决定转行做Java Web了,因为自己实在是不喜欢PHP这门语言,不喜欢那种混乱的风格和到处出漏洞的感觉,也不想深入学习它,正好最近也听说国内的网站后台绝大部分除了PHP就是Java,再加上自己对Java又非常感兴趣,于是开始学习Java,从Java SE入手了。
学了几天,只想说:Java真香!
Java中与C、C++、JavaScript相同的部分就不在笔记中记录了,学习的主要还是Java与这些语言不同的部分。

Java代码的组成

Java源文件即.java文件,经过javac命令编译后变为.class字节码文件,打包后变为.jar包。

一个Java文件如下(来自“Java300集”中的一个例子,稍微改动了一点):

/**
 * 版本2 实现小球沿着任意角度飞行
 * @Author N0_NullPointerException
 */

package com.N0.BallGame2;
import java.awt.*;
import javax.swing.*;

public class BallGame2 extends /*extends表示继承某个类*/  JFrame {
    //导入小球和球桌的图片
    Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");
    Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.jpg");

    double x = 100;     //小球初始位置的横坐标
    double y = 100;     //小球初始位置的纵坐标
    double degree = 3.14 / 3;   //初始角度:60度

    //绘制窗口和小球
    public void paint(Graphics g) {
        g.drawImage(desk, 0, 0, null);
        g.drawImage(ball, (int)x, (int)y, null);

        //计算小球的位置
        x = x + 10 * Math.cos(degree);
        y = y + 10 * Math.sin(degree);

        //判断碰到上下边界
        if (y > 500 - 40 - 30 || y < 40 + 40) {
            degree = -degree;
        }

        //判断碰到左右边界
        if (x < 40 || x > 856 - 40 - 30) {
            degree = 3.14 - degree;
        }
    }

    //加载窗口
    private void launchFrame() {
        setSize(856, 500);
        setLocation(50, 50);
        setVisible(true);

        //重复绘制窗口,大约25次/秒
        while (true) {
            repaint();
            try {
                Thread.sleep(40);   //40ms画一次
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        System.out.println("running...");
        BallGame2 game = new BallGame2();
        game.launchFrame();
    }
}

package:表示包。Java中包的概念有点类似于文件夹和其它语言中的namespace,采用包是为了方便对源码的管理。包的命名一般是自己域名或者公司名等倒着写,即以com开头。在这个程序段里这条语句的作用是声明这个.java文件从属于com.N0.BallGame2包,package为包的关键字。这条语句必须是整个Java源文件中非注释性语句的第一句。

import:导入一个包。可以通过import关键字导入相关的类。比如import java.awt.*;就表示导入java.awt包中所有的类。

public class BallGame2:Java是面向对象的语言,一个Java程序是由若干个类组成的,在一个.java文件中只能有一个public的类,其名称与文件名相同,例如这个类所在的文件就应命名为BallGame2.java。类的命名规则是每一个单词的首字母大写。

main方法:main()方法是程序的入口点,也称为“主方法”。String[] args是main方法的参数。

注释:Java有三种注释,分别是文档注释、单行注释和多行注释。

文档注释:以/**开头,以*/结束,其中包含与这个.java文件相关的信息和Javadoc的信息。

多行注释:以/*开头,以*/结束,可以跨多行,也可以放在一行内做行内注释(比如第十行的行内注释)。多行注释不能嵌套使用。

单行注释:以//开头到行尾结束,//符号后面的全部都是注释的内容。

Java的基本数据类型

整数类型

Java与C的整数类型差别不大,但是多了以下几种类型:

数据类型 占用内存空间 取值范围
byte 8位 -127~128
short 16位 -32767~32768
long 64位 -264~264-1

在声明long类型的整数时,需要在后面加上“L”,表示这是一个长整数。

注意:写l或者L都可以,但建议写L,这样便于区分L与大写的i。

浮点类型

与C和C++相同,Java的浮点类型也有float型和double型,在默认情况下小数会被视为double型,如果声明float类型的小数,需要在小数后面加上F(大写或者小写都可以)来说明这是一个float类型的小数。

字符类型

与C和C++相同,Java使用char关键字声明单个字符,声明方法、用法和存储原理与C相同。

布尔类型

使用关键字boolean来定义布尔类型,和C++的bool类型变量一样,boolean类型只有true和false两个可能的取值。

Java循环语句

Java除foreach语句、带标签的break和continue语句之外的选择、循环语句几乎和C++完全相同,就不做记录了。

以下部分来自《Java从入门到精通》

foreach语句

foreach语句是for语句的简化版本,它不能完全代替for语句,但是任何foreach语句都可以改写成for语句。

foreach并不是一个关键字,而是一种特殊的for语句的称呼方法,通常用foreach语句来遍历数组。

语法如下:

for (元素变量x : 遍历对象obj) {
    引用了x的java语句;
}

如:

public class Repetition {
    public static void main(String[] args) {
        int arr[] = { 7, 10, 1 };
        System.out.println("一维数组中的元素分别为:");
        for (int x : arr) {
            System.out.println(x);
        }
    }
}

带标签的break语句和continue语句

break和continue语句提供了标签功能,类似于C和C++中的goto语句,语法如下:

标签名: 循环体 {
    break 标签名;
}

例如:

public class BreakOutNested {
    public static void main(String[] args) {
        Loop: for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 6; j++) {
                if (j == 4) {
                    break Loop;
                }
                System.out.println("i = " + i + " j = " + j);
            }
        }
    }
}

带标签的continue语句与带标签的break语句用法相同。

你可能感兴趣的:(2019-06-22 Java学习笔记之Java基础)