Java学习笔记(一)

Java学习笔记(一)

依据《写给大忙人看的Java核心技术》所记笔记

【美】Cay S.Horstmann 著

杨谦 王巍 高伟斌 谢志强 译

转载请注明出处,勿用于商业用途

第一章 基本的编程结构

一、第一个程序

  1. 在Java中,所有代码都必须在类中定义

  2. main方法是程序运行时调用的第一个方法,它被声明为静态的,表面该方法不是依赖于对象运行的。

  3. 包(package)是一组相关类的集合,每个类都放入一个包中

  4. 三种注释方法:

    //我是行注释
    /*
     我是多行注释
    */
    /**
     我是文档注释
    */
    
  5. javac 命令将Java源代码编译为中间代码,也称字节码,并将它们保存到类文件中(即.class文件)

  6. System.out是对象,是PrintStream的实例

  7. 使用点符号调用对象上的实例方法

  8. 字符串是String类的实例,可以调用length方法返回字符串的长度,即:"Hello World".length()

  9. Random类的对象可以产生随机数,可以使用new操作符构建一个Random对象 new Random();

    类名之后是构造函数的参数列表

    Random.nextInt()方法可以提供一个整数,Random类声明在java.util包中,使用需导入,即:import java.util.Random

二、基本类型

  1. 整型(没有小数,允许为负)

    int(4字节)long(8字节)short(2字节)byte(1字节)

    如果long类型还不够用时,使用BigInteger类

  2. 使用long类型时带上L后缀,byte和short型采用强制转换

  3. 十六进制使用0x前缀,二进制使用0b前缀,八进制使用0前缀

  4. 可以给数字添加下划线方便阅读,Java编译器会自动删除它们。如:1_000_000表示100万

  5. 浮点类型

    float(4字节) double(8字节)

    float类型有F后缀,没有F默认为double类型,也可使用D作为Double类型后缀

  6. 十六进制指数使用p

  7. Double.POSITIVE_INFINITY代表正无穷

    Double.NEGATIVE_INFINITY代表负无穷

    Double.NaN代表“非数值”,如0.0/0.0或负数平方根

  8. 所有的“非数值”都彼此不同,不能使用x==Double.NaN检查

    可以调用Double.isNaNDouble.isInfinite进行检查,Double.isFinite可以检查既不是无穷也不是NaN

  9. 浮点数不适合金融计算,因为存在误差,若要准确无误差的数学计算可以使用BigDecimal

  10. 布尔型

有两种数值,falsetrue,Java中布尔类型不是数字类型,与0和1没有关系

三、变量

  1. Java是强类型语言,变量值只能是某个具体类型的值

  2. Java对字母大小写敏感

    变量和方法的名称以小写字母开始,类的名称的第一个字母大写

    驼峰式大小写:当名称由多个单词组成时,单词首字母大写,如:countOfInvalidInputs

  3. 在使用变量前必须初始化变量

  4. 允许在方法中的任何地方声明变量,尽可能晚地声明变量,刚好在首次需要变量的前一刻声明

    变量声明在它的初始值刚有了的那一刻

  5. final关键字表示一个值,一旦赋值后就不能改变了(常量)

    常量的名称使用大写字母,如:final int DAYS_PER_WEEK=7;

    可以在方法外,使用static关键字声明常量,如:public static final int DAYS=7;

  6. 在类内部可以直接使用常量,在其他类中使用需要在前面加上类名

  7. System类中声明了一个常量:public static final PrintStream out;

  8. 延迟final变量的初始化也可以,只要在首次使用前只初始化一次就好。

    final变量一旦被赋值,就是最终的值,永远无法改变

四、算术操作

  1. 基本运算

    1. /操作符,如两个操作数都是整型,代表整除;如有小数会产生小数
    2. 整数除以零会导致异常,如果没有捕获异常,程序会终止
    3. 浮点数除以零会产生无限值或NaN,不会导致异常
    4. 当n为奇数时,若n为正,n%2的结果为1,若n为负,n%2的结果为-1
  2. 数学方法

    1. 静态方法不用在对象上调用,如静态常量一样,只需要在前面加上静态常量的类名即可
    2. Math.pow(x,y) 产生x的y次方,Math.sqrt(x) 计算x的平方根
    3. 计算两个值哪个小或大,Math.minMath.max
    4. Math 类提供三角函数和对数方法,以及常量Math.PIMath.E
  3. 数字类型转换

    • 合法转换
      • byte-->short\int\long\double
      • short\char-->int\long\double
      • int-->long\double
    • 合法但损失信息
      • int-->float
      • long-->float\double
  4. 大数

    java.math 中的BigIntegerBigDecimal 类可实现任意精度计算

    Java不允许对象使用操作符,操作大数时必须使用方法调用

五、字符串

  1. 字符串连接

    使用操作符+可以将两个字符串连接起来,将一个字符串和另外一个值连接起来时转换为字符串

  2. 子字符串

    要将字符串分开,使用substring方法

    substring方法的第一个参数是提取子字符串中的起始位置,第二个参数是子字符串不包含的终止位置

    split方法分割由字符串分割的所有字符串

    分隔符也可以是正则表达式

  3. 字符串比较

    检查字符串是否相等,使用equals方法

    string变量可以是null,表明该变量根本没有引用任何对象

    在null上调用任何方法都会导致空指针异常

    不考虑大小写比较两个字符串,可使用equalsIgnorelase()

  4. 数字字符串转换

    整数转换为字符串可调用静态的Integer.toString()

    字符串转整数,使用Integer.parseInt()

    对于浮点数,使用Double.toStringDouble.parseDouble

  5. String类API

    在Java中,String类是不变的(immutable),即任何String方法不能修改自己的字符串

六、输入与输出

  1. 读取输入

    要读取字符串和数字,构造一个依附到System.inScanner

    Scanner in = new Scanner(System.in);
    

    Scanner 对象的nextLine方法从输入读取一行

    nextInt() 读取整数,nextDouble() 读取浮点数

    Scanner类位于java.util包中

  2. 格式化输出

    print方法不会在输出中新起一行,常用来提示输入

    使用printf和%来格式化输出

    使用String.format 方法创建不打印输出的格式化字符串

七、控制流

  1. 分支:

    if、else、else if、switch case

  2. 循环

    while、do while、for

  3. 跳出循环

    break、continue

    break+标签可以跳出多个循环

  4. 局部变量作用域

八、数组和数组列表

  1. 使用数组

    新建数组:int[] nums

    数组初始化:nums =new int[10];nums = int[] {1,2,3,4};y

  2. 构造数组

    也可以直接构造数组:int [] nums = {1,2,3,4};

    数组长度为0和空指针null不同

  3. 数组列表

    构造数组时,必须指定长度,一旦构造好,数组的长度不能再变

    使用java.util包中的ArrayList类来管理数组

    ​ 声明变量:ArrayList<String> friends =new ArrayList<>();

    声明之后结果为一个大小为0的数组列表,可以用add方法给末尾加元素

    访问元素要使用get方法,不能用[]直接访问

    size方法可返回当前列表大小

  4. 基本类型包装类

    泛型类不能使用基本类型作为类型参数,可以使用包装类

    每一种基本类型都有对应的包装类

    Integer、Byte、Short、Long、Character、Float、Double和Boolean

    ==和!=操作符比较引用对象而不是对象的内容

  5. 增强的for循环

    for(int n:numbers){}

    其中的n不是索引值,而是被赋值为numbers[0]、numbers[1]等

  6. 数组与数组列表的复制

    数组直接等于的复制是引用直接指向同一个数组

    若真正复制数组需要使用静态方法Array.copyOf

    int[] copiedPrimes = Arrays.copyOf(primes,primes.length);

    该方法构造一个期望长度的新数组,并将原数组的元素复制进去

  7. 数组算法

    Arrays(数组)类 Collections(集合)类

    对数组或数组列表排序,使用sort方法

    Arrays.sort(names)Collections.sort(friends)

    toString() 产生一个数组的字符串表示

  8. 命令行参数

    当用命令行执行程序时,命令行中的指定参数就赋值给main函数中的args

  9. 多维数组

    Java中的多维数组是通过数组的数组来实现

    int[][] square =new int[4][4];

九、功能分解

静态方法,即static修饰的方法可在main中直接调用

变长参数必须是方法中的最后一个参数,用修饰符... 修饰

public static double max(double first,double ... rest);

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容

  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,746评论 2 9
  • 1.Java跨平台的原理: 1)编译之后会生成与平台无关的字节码文件2)得依赖不同平台的虚拟机(JVM)JVM是不...
    寒桥阅读 372评论 0 1
  • 一、Java 原型数据有8种 1. 整型 int 32 位 4字节 2. 短整型 short 16位 2 字节 ...
    姜海涛阅读 155评论 0 0
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,051评论 0 4
  • Win7下如何打开DOS控制台? a:开始--所有程序--附件--命令提示符 b:开始--搜索程序和文件--cmd...
    逍遥叹6阅读 1,595评论 4 12