java程序基础

没有特殊说明,我的所有学习笔记都是从廖老师那里摘抄过来的,侵删

引言

兜兜转转到了大四,学过了C,C++,C#,Java,Python,学一门丢一门,到了最后还是要把Java捡起来。所以奉劝大家,面向对象还是要掌握一门,虽然Python好写舒服,但是毕竟不能完全面向对象,也没有那么多的应用场景,所以,奉劝看到本文的各位,还是提前学好C#或者Java。

Java程序的基本结构

  • 每个Java程序只能有一个public修饰的类,并且该类的名字要和该Java程序文件同名。

  • Java入口程序规定的方法必须是静态方法,方法名必须为main,括号内的参数必须是String数组。

       public static void main(String[] args) { // 方法名是main
// 方法代码...
} // 方法定义结束
  • 类名首字母大写,方法名首字母小写。

  • Java的每一行语句必须以分号结束。

  • 特殊的多行注释需要写在类和方法的定义处,可以用于自动创建文档。

   /**
* 可以用来自动创建文档的注释
*
* @auther liaoxuefeng
*/
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
  • Eclipse IDE提供了快捷键Ctrl+Shift+F(macOS是⌘+⇧+F)帮助我们快速格式化代码的功能。

变量和数据类型

  • Java中,变量分为两种:基本类型的变量和引用类型的变量。

  • 在Java中,变量必须先定义后使用,在定义变量的时候,可以给它一个初始值。

  • 不写初始值,就相当于给它指定了默认值。默认值总是0

  • 不同的数据类型占用的字节数不一样,byte恰好就是一个字节,而longdouble需要8个字节。

          ┌───┐
byte │ │
└───┘
┌───┬───┐
short │ │ │
└───┴───┘
┌───┬───┬───┬───┐
int │ │ │ │ │
└───┴───┴───┴───┘
┌───┬───┬───┬───┬───┬───┬───┬───┐
long │ │ │ │ │ │ │ │ │
└───┴───┴───┴───┴───┴───┴───┴───┘
┌───┬───┬───┬───┐
float │ │ │ │ │
└───┴───┴───┴───┘
┌───┬───┬───┬───┬───┬───┬───┬───┐
double │ │ │ │ │ │ │ │ │
└───┴───┴───┴───┴───┴───┴───┴───┘
┌───┬───┐
char │ │ │
└───┴───┘
  • 在Java中的整形,和他们的取值范围

    • byte:-128 ~ 127
    • short: -32768 ~ 32767
    • int: -2147483648 ~ 2147483647
    • long: -9223372036854775808 ~ 9223372036854775807
   public class Main {
public static void main(String[] args) {
int i = 2147483647;
int i2 = -2147483648;
int i3 = 2_000_000_000; // 加下划线更容易识别,而且不会有错
int i4 = 0xff0000; // 十六进制表示的16711680
int i5 = 0b1000000000; // 二进制表示的512
long l = 9000000000000000000L; // long型的结尾需要加L
System.out.println(i3);
}
}
  • 浮点型的数就是小数,因为小数用科学计数法表示的时候,小数点是可以“浮动”的
   float f1 = 3.14f;
float f2 = 3.14e38f; // 科学计数法表示的3.14x10^38
double d = 1.79e308;
double d2 = -1.79e308;
double d3 = 4.9e-324; // 科学计数法表示的4.9x10^-324
  • 布尔类型boolean只有truefalse两个值,布尔类型总是关系运算的计算结果

    • Java语言对布尔类型的存储并没有做规定,因为理论上存储布尔类型只需要1 bit,但是通常JVM内部会把boolean表示为4字节整数。
  • 字符类型char表示一个字符。Java的char类型除可表示标准的ASCII外,还可以表示一个Unicode字符。

    • 注意char类型使用单引号',且仅有一个字符,要和双引号"的字符串类型区分开。
  • 定义变量的时候,如果加上final修饰符,这个变量就变成了常量:

   final double PI = 3.14; // PI是一个常量
double r = 5.0;
double area = PI * r * r;
PI = 300; // compile error!
  • 常量在定义时进行初始化后就不可再次赋值,再次赋值会导致编译错误。

  • var关键字

   StringBuilder sb = new StringBuilder();
var sb = new StringBuilder();//类型的名字太长了
  • 变量的作用范围

    • 而在语句块中定义的变量,它有一个作用域,就是从定义处开始,到语句块结束。

整数运算

  • 遵循四则运算规则,可以使用任意嵌套的小括号

  • 整数的数值表示不但是精确的,而且整数运算永远是精确的,即使是除法也是精确的,因为两个整数相除只能得到结果的整数部分:

  • 求余运算使用%

  • 整数的除法对于除数为0时运行时将报错,但编译不会报错

  • 整数由于存在范围限制,如果计算结果超出了范围,就会产生溢出,而溢出不会出错,却会得到一个奇怪的结果。

  • 自增/自减

    • Java还提供了++运算和--运算,它们可以对一个整数进行加1和减1的操作:
  • 如果对一个负数进行右移,最高位的1不动,结果仍然是一个负数:

  • 还有一种不带符号的右移运算,使用>>>,它的特点是符号位跟着动,因此,对一个负数进行>>>右移,它会变成正数,原因是最高位的1变成了0

  • byteshort类型进行移位时,会首先转换为int再进行位移。

    仔细观察可发现,左移实际上就是不断地×2,右移实际上就是不断地÷2。

  • 位运算是按位进行与、或、非和异或的运算。

  • 运算优先级

    在Java的计算表达式中,运算优先级从高到低依次是:

    ()

    ! ~ ++ --

    * / %

    + -

    << >> >>>

    &

    |

    += -= *= /=

  • 类型自动提升与强制转型

    • 强制转型使用(类型)
    • 超出范围的强制转型会得到错误的结果,原因是转型时,int的两个高位字节直接被扔掉,仅保留了低位的两个字节。
    • 强制转型的结果很可能是错的。
    • 应该选择合适范围的整型(intlong),没有必要为了节省内存而使用byteshort进行整数运算。

浮点数运算

  • 浮点数运算和整数运算相比,只能进行加减乘除这些数值计算,不能做位运算和移位运算。

  • 由于浮点数存在运算误差,所以比较两个浮点数是否相等常常会出现错误的结果。正确的比较方法是判断两个浮点数之差的绝对值是否小于一个很小的数:

  • 整数运算在除数为0时会报错,而浮点数运算在除数为0时,不会报错,但会返回几个特殊值:

    • NaN表示Not a Number
    • Infinity表示无穷大
    • -Infinity表示负无穷大
   double d1 = 0.0 / 0; // NaN
double d2 = 1.0 / 0; // Infinity
double d3 = -1.0 / 0; // -Infinity

可以将浮点数强制转型为整数。在转型时,浮点数的小数部分会被丢掉。如果转型后超过了整型能表示的最大范围,将返回整型的最大值

如果要进行四舍五入,可以对浮点数加上0.5再强制转型。

整型和浮点型运算时,整型会自动提升为浮点型。

布尔运算

  • 布尔运算是一种关系运算,包括以下几类:
    • 比较运算符:>>=<<===!=

      • 与运算 &&
      • 或运算 ||
      • 非运算 !
  • 优先级从高到低依次是:
    • !
    • >>=<<=
    • ==!=
    • &&
    • ||
  • 短路运算
    • 布尔运算的一个重要的特点是短路运算,如果一个布尔运算的表达式能提前确定结果,则后续的计算不再执行,直接返回结果。
  • 三元符运算
    • b ? x : y,它根据第一个布尔表达式的结果,分别返回后续两个表达式之一的计算结果。

字符和字符串

  • 在Java中,字符和字符串是两个不同的类型。

    • 基本类型的变量是“持有”某个数值,引用类型的变量是“指向”某个对象;
  • 字符类型

    • char类型是基本的数据类型
    • 一个char保存一个Unicode字符
    • 转义字符\u+Unicode编码来表示一个字符
    • 因为Java在内存中总是使用Unicode表示字符,所以,一个英文字符和一个中文字符都用一个char类型表示,它们都占用两个字节。要显示一个字符的Unicode编码,将char类型直接赋值给int类型即即可。
   char c1 = 'a'
char c2 = '中'
int n1 = 'a'//65
int n2 = '中'//20013
// 注意是十六进制:
char c3 = '\u0041'; // 'A',因为十六进制0041 = 十进制65
char c4 = '\u4e2d'; // '中',因为十六进制4e2d = 十进制20013
  • 字符串类型

    • String字符串类型是引用类型
    • 常见的转义字符包括:
      • \" 表示字符"
      • \' 表示字符'
      • \\ 表示字符\
      • \n 表示换行符
      • \r 表示回车符
      • \t 表示Tab
      • \u#### 表示一个Unicode编码的字符
  • 字符串连接

    • 使用+连接任意字符串和其他数据类型

      • 如果使用+连接字符串和其他类型,Java会自动将其他类型转换为字符串类型,再连接。
  • 多行字符串

    • 从Java13开始,字符串可以用"""..."""表示多行字符串
  • 不可变特性

    • 字符串s变了吗?其实变的不是字符串,而是变量s的“指向”
    • 原来的s还在,只是我们不能再通过s访问
  • 空值null

   String s1 = null; // s1是null
String s2; // 没有赋初值值,s2也是null
String s3 = s1; // s3也是null
String s4 = ""; // s4指向空字符串,不是null

数组类型

  • Java的数组有几个特点:

    • 数组所有元素初始化为默认值,整型都是0,浮点型是0.0,布尔型是false
    • 数组一旦创建后,大小就不可改变
    • 数组是引用类型
    • 数组元素可以是值类型(如int)或引用类型(如String),但数组本身是引用类型
  • 数组变量.length获取数组大小

   int[] ns = new int[] { 68, 79, 91, 85, 62 };//这样可以不声明数组的大小
int[] ns = { 68, 79, 91, 85, 62 };//还可以进一步简化为这样
  • 字符串数组

    • 数组本身是引用类型,其中的元素也是引用类型的字符串类型。

到头来还是逃不开Java - Java13程序基础的更多相关文章

  1. 到头来还是逃不开Java - Java13面向对象基础

    面向对象基础 没有特殊说明,我的所有学习笔记都是从廖老师那里摘抄过来的,侵删 引言 兜兜转转到了大四,学过了C,C++,C#,Java,Python,学一门丢一门,到了最后还是要把Java捡起来.所以 ...

  2. 到头来还是逃不开Java - Java13核心类

    Java13核心类 没有特殊说明,我的所有学习笔记都是从廖老师那里摘抄过来的,侵删 引言 兜兜转转到了大四,学过了C,C++,C#,Java,Python,学一门丢一门,到了最后还是要把Java捡起来 ...

  3. Java并发程序设计(二)Java并行程序基础

    Java并行程序基础 一.线程的生命周期 其中blocked和waiting的区别: 作者:赵老师链接:https://www.zhihu.com/question/27654579/answer/1 ...

  4. JAVA并行程序基础

    JAVA并行程序基础 一.有关线程你必须知道的事 进程与线程 在等待面向线程设计的计算机结构中,进程是线程的容器.我们都知道,程序是对于指令.数据及其组织形式的描述,而进程是程序的实体. 线程是轻量级 ...

  5. JAVA并行程序基础二

    JAVA并行程序基础二 线程组 当一个系统中,如果线程较多并且功能分配比较明确,可以将相同功能的线程放入同一个线程组里. activeCount()可获得活动线程的总数,由于线程是动态的只能获取一个估 ...

  6. JAVA并行程序基础一

    JAVA并行程序基础一 线程的状态 初始线程:线程的基本操作 1. 新建线程 新建线程只需要使用new关键字创建一个线程对象,并且用start() ,线程start()之后会执行run()方法 不要直 ...

  7. Spring MVC + Spring + Mybitis开发Java Web程序基础

    Spring MVC + Spring + Mybitis是除了SSH外的另外一种常见的web框架组合. Java web开发和普通的Java应用程序开发是不太一样的,下面是一个Java web开发在 ...

  8. Java并行程序基础。

    并发,就是用多个执行器(线程)来完成一个任务(大任务)来处理业务(提高效率)的方法.而在这个过程中,会涉及到一些问题,所以学的就是解决这些问题的方法. 线程的基本操作: 1.创建线程:只需要new一个 ...

  9. 第2章 Java并行程序基础(三)

    2.8 程序中的幽灵:隐蔽的错误 2.8.1 无提示的错误案例 以求两个整数的平均值为例.请看下面代码: int v1 = 1073741827; int v2 = 1431655768; Syste ...

随机推荐

  1. asp dotnet core 通过图片统计 csdn 用户访问

    在 csdn 的访问统计里面,只能用 csdn 提供的访问统计,因为在 csdn 中不支持在博客加上 js 代码,也就是无法使用友盟等工具统计. 通过在 asp dotnet core 创建一个图片链 ...

  2. spring的几个面试题

    Spring 是一种轻量级开发框架,旨在提高开发人员的开发效率以及系统的可维护性.Spring 官网:https://spring.io/. 我们一般说 Spring 框架指的都是 Spring Fr ...

  3. 关于electron中入口文件main.js一些重要参数(持续更新maybe)

    const {app, BrowserWindow} = require('electron') const path = require('path') let mainWindow functio ...

  4. python 多线程两种实现方式,Python多线程下的_strptime问题,

    python 多线程两种实现方式 原创 Linux操作系统 作者:杨奇龙 时间:2014-06-08 20:24:26  44021  0 目前python 提供了几种多线程实现方式 thread,t ...

  5. mac笔记本安装Android sdk

    一.先下载android sdk for mac   给二个靠谱的网址: a). http://down.tech.sina.com.cn/page/45703.html b). http://mac ...

  6. nginx实现缓存功能

    Nginx从0.7.48版本开始,支持了类似Squid的缓存功能.这个缓存是把URL及相关组合当作Key,用md5编码哈希后保存在硬盘上,所以它可以支持任意URL链接,同时也支持404/301/302 ...

  7. 小白进阶之路-python格式化输出

    1.不使用格式化前:传值时比较麻烦而且不精确. 2.格式化输出后,%代表先占个位,s代表字符串,%s代表这里之后会传一个字符串类型的值,%s其实可以接受任意类型的值:%d传入的值要求必须是数字. %s ...

  8. cocos2dx Geometry Size和Rect

    Size 代码都是基础代码不注释了,写一些特别的 1.赋值时可以接收Size和Vec2类型的值,保证的类型的兼容性 2.对运算符进行了重载,可以按照正常的数学逻辑运算 3..可以使用equals对比大 ...

  9. Qt listWidget和QListWidgetItem的简单使用

    简单的来实习了下 #include "mainwindow.h" #include "ui_mainwindow.h" #include<QListWid ...

  10. 1043 输出PATest (20 分)C语言

    给定一个长度不超过 10^​4的.仅由英文字母构成的字符串.请将字符重新调整顺序,按 PATestPATest- 这样的顺序输出,并忽略其它字符.当然,六种字符的个数不一定是一样多的,若某种字符已经输 ...