Java学习笔记--来自Java核心卷和尚学堂视频

Java常见点解析

起步之注意点

  1. Java对大小写敏感,关键字public被称为访问修饰符
  2. 关键字class 的意思是类。Java是面向对象的语言,所有代码必须位于类里面。
  3. 一个源文件中至多只能声明一个public的类,其它类的个数不限,如果源文件中包含一个public 类,源文件名必须和其中定义的public的类名相同,且以“.java”为扩展名。
  4. 一个源文件可以包含多个类class。
  5. 正确编译后的源文件,会得到相应的字节码文件,编译器为每个类生成独立的字节码文件,且将字节码文件自动命名为类的名字且以“.class”为扩展名。
  6. main方法是Java应用程序的入口方法,它有固定的书写格式:
    1. public static void main(String[] args) {…}
  7. 在Java中,用花括号划分程序的各个部分,任何方法的代码都必须以“{”开始,以“}”结束, 由于编译器忽略空格,所以花括号风格不受限制。Java中每个语句必须以分号结束,回车不是语句的结束标志,所以一个语句可以跨多行。
  8. 编程时,一定要注意缩进规范;
  9. 在写括号、引号时,一定是成对编写,然后再往里插入内容。

用一个简单的台球游戏进行示例, 桌球在球桌中按照一定线路和角度移动,遇到边框会自动弹回。运行的结果图如下:

package com.zrq.first;

import java.awt.*;
import javax.swing.*;

public class BallGame extends JFrame {

    //导入小球图片
    Image ball = Toolkit.getDefaultToolkit().getImage("image/ball.png");
    //导入桌子图片
    Image desk = Toolkit.getDefaultToolkit().getImage("image/desk.jpg");

    double x = 100;
    double y = 100;

    boolean right = true;
    double degree = 3.14 / 3;//弧度

    @Override
    public void paint(Graphics g) {
        System.out.println("111");
        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;
        }
/*
        if (right) {
            x = x + 10;
        } else {
            x = x - 10;
        }
        if (x > 856-40-30) {
            right = false;
        }
        if (x < 40) {
            right = true;
        }
*/
    }

    void launchFrame() {
        setSize(856, 500);
        setLocation(50, 50);
        setVisible(true);

        //重画
        while (true) {
            repaint();
            try {
                Thread.sleep(40);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {

        BallGame game = new BallGame();
        game.launchFrame();
    }
}

数据类型和运算符

注释

  • 单行注释: 使用“//”开头,“//”后面的单行内容均为注释。
  • 多行注释: 以“/”开头以“/”结尾,在“/”和“/”之间的内容为注释,我们也可以使用多行注释作为行内注释。但是在使用时要注意,多行注释不能嵌套使用。
  • 文档注释: 以“/**”开头以“*/”结尾,注释中包含一些说明性的文字及一些JavaDoc标签(后期写项目时,可以生成项目的API)

标识符

标识符是用来给变量、类、方法以及包进行命名的

  • 标识符必须以字母、下划线_、美元符号$开头。
  • 标识符其它部分可以是字母、下划线“_”、美元符“$”和数字的任意组合。
  • Java 标识符大小写敏感,且长度无限制。
  • 标识符不可以是Java的关键字。

标识符的使用规范

  • 表示类名的标识符:每个单词的首字母大写,如Man, GoodMan
  • 表示方法和变量的标识符:第一个单词小写,从第二个单词开始首字母大写,我们称之为“驼峰原则”(常用此种)

【注意】不要用汉字,不符合标准

关键字/保留字

emmm....这个本人觉得用到看看就好吧

abstract assert boolean break byte case
catch char class const continue default
do double else extends final finally
float for goto(不要用) if implements import
instanceof int interface long native new
null package private protected public return
short static strictfp super switch synchronized
this throw throws transient try void
volatile while

变量的本质与分类(有C语言基础可跳过)

变量本质上就是代表一个”可操作的存储空间”,空间位置是确定的,但是里面放置什么值不确定。我们可通过变量名来访问“对应的存储空间”,从而操纵这个“存储空间”存储的值。

Java身为强类型语言,必须要声明作用域。

从整体上可将变量划分为局部变量、成员变量(也称为实例变量)和静态变量。

局部变量、成员变量、静态变量的区别如下:

类型 声明位置 从属于 生命周期
局部变量 方法或语句块内部 方法/语句块 从声明位置开始,直到方法或语句块执行完毕,局部变量消失,使用前需要声明
成员变量(实例变量) 类内部,方法外部 对象 对象创建,成员变量也跟着创建。对象消失,成员变量也跟着消失;成员变量会自动初始化
静态变量(类变量) 类内部,static修饰 类被加载,静态变量就有效;类被卸载,静态变量消失。

常量(与C语言略微不同)

注意与c中的区别,const变为final

变量和常量命名规范(规范是程序员的基本准则,不规范会直接损害你的个人形象):

  1. 所有变量、方法、类名:见名知意
  2. 类成员变量:首字母小写和驼峰原则: monthSalary
  3. 局部变量:首字母小写和驼峰原则
  4. 常量:大写字母和下划线:MAX_VALUE
  5. 类名:首字母大写和驼峰原则: Man, GoodMan
  6. 方法名:首字母小写和驼峰原则: run(), runRun()

基本数据类型(C语言上面增加)

整形
类型 占用存储空间 表数范围
byte 1字节 -27 ~ 27-1(-128~127)
short 2字节 -215 ~ 215-1(-32768~32767)
int 4字节 -231 ~ 231-1 (-2147483648~2147483647)约21亿
long 8字节 -263 ~ 263-1
浮点型
类型 占用存储空间 表数范围
float 4字节 -3.403E38~3.403E38(科学计数法)
double 8字节 -1.798E308~1.798E308(科学计数法)

float类型赋值时需要添加后缀F/f,浮点数不精确,一定不要用于比较,如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal或BigInteger类。

字符型

字符型在内存中占2个字节,在Java中使用单引号来表示字符常量。例如’A’是一个字符,它与”A”是不同的,”A”表示含有一个字符的字符串。

在字符型中,会涉及到转义字符,常见的如下:

转义符 含义 Unicode****值
\b 退格(backspace) \u0008
\n 换行 \u000a
\r 回车 \u000d
\t 制表符(tab) \u0009
\“ 双引号 \u0022
\' 单引号 \u0027
\ 反斜杠 \u005c

String本身就是字符列

boolbean类型

boolean类型有两个常量值,true和false,在内存中占一位(不是一个字节),不可以使用 0 或非 0 的整数替代 true 和 false ,这点和C语言不同。

运算符
整形运算
  1. 如果两个操作数有一个为Long, 则结果也为long。
  2. 没有long时,结果为int。即使操作数全为short,byte,结果也是int。
浮点运算:
  1. 如果两个操作数有一个为double,则结果为double。
  2. 只有两个操作数都是float,则结果才为float。
赋值运算符与拓展运算符
运算符 用法举例 等效的表达式
+= a += b a = a+b
-= a -= b a = a-b
*= a *= b a = a*b
/= a *= b a = a/b
%= a *= b a = a%b
关系运算符
运算符 含义 示例
== 等于 a==b
!= 不等于 a!=b
> 大于 a>b
< 小于 a<b
>= 大于或等于 a>=b
<= 小于或等于 a<=b
逻辑运算符
运算符 说明
逻辑与 &( 与) 两个操作数为true,结果才是true,否则是false
逻辑或 |(或) 两个操作数有一个是true,结果就是true
短路与 &&( 与) 只要有一个为false,则直接返回false
短路或 ||(或) 只要有一个为true, 则直接返回true
逻辑非 !(非) 取反:!false为true,!true为false
逻辑异或 ^(异或) 相同为false,不同为true
位运算符
位运算符 说明
~ 取反
& 按位与
| 按位或
^ 按位异或
<< 左移运算符,左移1位相当于乘2
>> 右移运算符,右移1位相当于除2取商
字符串连接符

​“+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。

条件运算符

常见的语法为

x ? y : z

其中 x 为 boolean 类型表达式,先计算 x 的值,若为true,则整个运算的结果为表达式 y 的值,否则整个运算结果为表达式 z 的值。

表达式优先级
优先级 运算符 结合性
1 () 括号运算符 由左至右
2 !、+(正号)、-(负号) 一元运算符 由左至右
2 ~ 位逻辑运算符 由右至左
2 ++、-- 递增与递减运算符 由右至左
3 *、/、% 算术运算符 由左至右
4 +、- 算术运算符 由左至右
5 <<、>> 位左移、右移运算符 由左至右
6 >、>=、<、<= 关系运算符 由左至右
7 ==、!= 关系运算符 由左至右
8 & 位运算符、逻辑运算符 由左至右
9 ^ 位运算符、逻辑运算符 由左至右
10 | 位运算符、逻辑运算符 由左至右
11 && 逻辑运算符 由左至右
12 || 逻辑运算符 由左至右
13 ? : 条件运算符 由右至左
14 =、+=、-=、*=、/=、%= 赋值运算符、扩展运算符 由右至左

注意,若不是考试,不用刻意记忆,每一层加上括号就好

自动类型转换

自动类型转换指的是容量小的数据类型可以自动转换为容量大的数据类型。如图所示,黑色的实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的损失。

强制类型转换

强制类型转换,又被称为造型,用于显式的转换一个数值的类型。在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。

语法格式:

(type)var//运算符“()”中的type表示将值var想要转换成的目标数据类型。

操作比较大的数时,要留意是否溢出,尤其是整数操作时。

控制语句

 1.从结构化程序设计角度出发,程序有三种结构:顺序结构、选择结构和循环结构

  2.选择结构

  (1)if单选择结构 if-else双选择结构 if-else if-else多选择结构

  (2)switch多选择结构

  3.多选择结构与switch的关系:当布尔表达式是等值判断的情况,可使用多重选择结构或switch结构,如果布尔表达式区间判断的情况,则只能使用多重选择结构

   (1) 循环结构

   (2)当型:while与for

   (3)直到型:do-while

  4.while与do-while的区别,在布尔表达式的值为false时while的循环体一次也不执行,而do-while至少执行一次

  5.break可以在switch与循环结构中使用,而continue只能在循环结构中使用

  6.方法就是一段用来完成特定功能的代码片段,类似于其它语言的函数

  7.方法的重载是指一个类中可以定义多个方法名相同,但参数不同的方法。 调用时,会根据不同的参数自动匹配对应的方法

  8.任何能用递归解决的问题也能使用迭代解决。在要求高性能的情况下尽量避免使用递归,递归调用既花时间又耗内存。

(0)

相关推荐

  • Java语言基础知识整理汇总

    表达式和运算符: 算术运算符: 元代表多少个操作数,一元表示一个操作数: 一元运算符:++自增(只能是变量),++a等价于a = a+ 1; ++a 与 a++ 有区别: ++a 先自增 在运算 a+ ...

  • low-level——java语言的基本特征(2)

    java 程序是以类作为基本单位,所有的代码和程序都要写在类中. 一个完整的应用程序或系统至少要有一个 main 方法,它是整个程序的入口,程序的第一行代码就是 main 中的第一行代码. 任何jav ...

  • 了解Verilog HDL语法规则吗,看完这篇就知道了

    本节介绍Verilog HDL语法规则,包括文字规则.数据对象及运算符的使用等. Verilog HDL文字规则 1.关键词与标识符 关键词是Verilog HDL中预先定义的单词,它们在程序中有特别 ...

  • 一文通读Java的基础语法

    Java基础语法,越来越多的人在学习Java的时候需要掌握,但是很多人又找不到一个完整的语法教程,今天小编历尽千辛万苦,终于整理了一份完整的Java基础语法的汇总,希望对您的学习有所帮助. 下面开始今 ...

  • JavaScript的简介与语法大合集

    以最新的JavaScript标准为基准.通过简单但足够详细的内容,为你讲解从基础到高阶的JavaScript相关知识. JavaScript简介 让我们来看看JavaScript有什么特别之处,我们可 ...

  • 小白学java,第一节课就是这么干

    龙珠悟空,一个写故事的程序员 <小白学java>第四章:java第一堂课 序言:这一堂课很干,想水一篇文章,故事缩略到极短,直接上java入门整理好的前两张章干货! PS: 1.  不要说 ...

  • Java 学习笔记

    您对计算机(电脑)有了解吗? 计算机组成 系统软件 直接和硬件交互的软件叫系统软件,例如 win7.win8.Linux.mac等操作系统 应用软件 通常在运行在系统软件上,也就是在系统软件上开发的软 ...

  • java学习笔记

    猪油捞饭 "我在小红书发现一篇超赞的笔记" 打开App

  • java事件监听器怎么绑定,Java学习笔记(二)事件监听器

    Java实现对组件事件(如单击.输入等)的监听和JavaScript类似,都是先添加Listener,再写触发函数,不同的是,Java实现监听前必须使用implements将各个接口添加到类内. 相关 ...

  • Java学习笔记(四):理解接口 事件监听器

    一.接口 父类和子类比较,父类是一个比子类更抽象的类.这个抽象体现在两个方面:一是父类的属性和方法比子类的少:二是,子类的方法比父类的方法更加具体. 当父类非常抽象时,或者我们仅仅知道这个类的对象应该 ...

  • Java 学习笔记--面向对象的三大特征

    面向对象的三大特征 封装 封装 将类的某些信息隐藏在类的内部 不允许外部程序直接访问 只能通过该类提供的方法来实现 封装的好处 只能通过规定方法访问 隐藏类的实现细节 方便修改 方便加入控制语句 具体 ...

  • Java学习笔记_17 项目实战之天天酷跑(四):游戏主界面

    此文转载自:https://blog.csdn.net/qq_45909299/article/details/110306321#commentBox 接上文,本文将实现游戏主界面,功能如下: 移动 ...

  • Java学习——3、Java的语法成分

    今天,介绍Java的组成,即语言成分. 以汉语为例: 汉语由笔画组成,- 横  | 竖 撇(原谅我画不出来这一撇一捺还有弯勾) . 不同笔画组成不同的字. 字组成词. 词组成句. 句最终成就一篇文章. ...

  • JAVA多线程学习笔记整理

    多线程: 三种创建方法 继承Thread类,以线程运行内容重写run方法,创建Thread对象并用start方法启动该线程. (匿名内部类) (Lambda表达式) 实现Runable接口,以线程运行 ...

  • Java Web学习笔记(一)

    数据库相关(关于数据库连接的方法应该定义为静态方法): 加载驱动: static { // 加载驱动 try { Class.forName("com.mysql.cj.jdbc.Drive ...