3基础知识

3基础知识

Java是一个完整的平台,拥有庞大的库。
简单、面向对象、网络技能、健壮、安全、可移植、易解释、高性能、多线程、动态。

3.3数据类型

.1整型

  • int 4字节 +-20亿
  • short 2字节 -32768~32767
  • long 8字节 好大好大 (后缀L)
  • byte 1字节 -128~127
  • 二进制前缀(0b) 十六进制前缀(0x)

.2浮点类型

  • float 4字节 6~7位有效数字
  • double 8字节 15位有效数字
  • 正负无穷大、NaN 检测x是否为“非数值”————>Double.isNaN(X)

.3char类型

  • 单个字符,通常用来表示字符常量
  • Unicode编码表
  • 强烈建议不要使用

.4boolean类型

  • false/true
  • 和整型不能相互转换

3.4变量

  • 字母开头,数字字母构成
  • 判断是否为字母:isJavaIdentifierStart/isJavaIdentifierPart
  • 大小写敏感

.1变量初始化

  • 变量的声明尽量靠近变量第一次使用的地方
  • java中不区分变量的声明和定义

.2常量

  • final关键字,只能被赋值一次,之后无法更改
  • static final,类常量,类中的方法可以使用;声明为public,则其他类中也可以使用

3.5运算符

  • 整数除0出异常,浮点数除0出无穷大/NaN
  • 浮点计算的精度问题

.1自增/自减运算符

  • ++/--咯

.2关系/boolean

  • == < > <= >= && || !
  • x==y?x:y

.3位运算符

  • | ^ ~ &

.4数学函数和常量

  • 三角函数、指数函数/对数函数、PI、E

.5数值类型之间的转换

  • 合法转换/丢失精度(int到float;long到float/double)
  • 两个数值进行二元操作时,有double/float/long,则另一个也会转换为对应类型。否则两个操作数将都被转换为int

.6强制类型转换

  • 截断小数部分来取整
  • 想要进行舍入运算(得到最接近的整数),需使用Math.round方法
    double x=9.97;
    int nx = (int)Math.round(x);//round返回long

.7括号和运算符级别

youxianji.jpg

.8枚举类型

  • 变量的取值只在一个有限的集合内
    enmu Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE}
    Size s = Size.MEDIUM

3.6字符串

  • unicode字符序列
  • Java没有内置字符串类型,而是在标准Java类库中提供一个预定义类,叫做String
  • 每个用双括号括起来的字符串都是String类的一个实例

.1子串

String greeting = "Hello";
String s = greeting.substring(0, 3);//"Hel"
  • 第二个参数是不想复制的第一个位置,容易计算子串的长度。

.2拼接

  • +号拼接字符串
    int age = 13;
    String rating = "PG" + age;//"PG13"

.3不可变字符串

  • 不能修改其中的任何一个字符

.4检测是否相等

  • .equals()
  • .equalsIgnoreCase()//不区分大小写

.5空串与null

  • 空串“”,长度为0
  • if(str != null && str.length() != 0)

.6代码点与代码单元

  • .length(),返回unicode字符数量

  • 想要得到实际长度,即代码点的数量(从0开始):
    int cpCount = greeting.codePointCount(0, greeting.length())

  • 得到第i个代码点:
    int index = greeting.offsetBytePoints(0, i);
    int cp = greeting.codePointAt(idnex);

  • 要遍历一个字符串:
    int cp = sentence.codePoint(i);
    if (Character.isSupplementaryCodePoint(cp)) i += 2;
    else i++;

.7字符串API

  • 好多好多个,熟记才能活用

.8构造字符串

  • 传统方法效率低,浪费空间
  • 字符串构造器:
    StringBuilder builder = new StringBuilder();
    builder.append(ch);//添加单个字符
    builder.append(str);//添加字符串
    String completedString = builder.toString();

3.7输入输出

.1读取输入

  • 标准输出流;标准输入流:
    Scanner in = new Scanner(System.in);
    System.out.print("What is your name?");
    String name = in.nextLine();//in.next(); in.nextInt();
  • Scanner是可见的,不适合读取密码,密码用ole类实现:
    Console cons = System.console();
    String userName = cons.readLine("User name:");
    char[] passwd = cons.readPassword("Password:");

.2格式化输出

  • System.out.printf();沿用了C语言的语法,定长、定精度(转换符表P57,标志符表P58)
  • 日期和时间转换符表P58:
    System.out.printf(" %1$s %2$tB %2$te, %2$tY", "Due date:", new Date());
    Due date: December 25,2016
  • 图3-6 格式说明符语法(O——O 不是很懂啊。 )

.3文件输入与输出

  • 需要用File对象构造一个Scanner对象:
    Scanner in = new Scanner(Paths.get("mufile.txt"));
    PrintWriter out = new PrintWriter("myfile.txt");
  • 不同编译环境(命令行或IDE)下的启动路径不同,需要定位。若觉繁琐,可以使用绝对路径
  • IOException,FileNotFoundException
    可以利用重定向将任意文件捆绑到System.in和System.out:
    java MyProg<myfile.txt> output.txt
    避免FileNotFoundException

3.8控制流程

  • 循环控制和多值检测

.1块作用域

  • block,可嵌套,不可在两个块中声明同名的变量

.2条件语句

  • if (condition) statement
  • 块语句(block statement)
  • if (condition) statement1 else statement2
  • if (condition1) statement1 else if (condition2) statement2 else statement3

.3循环

  • while (condition) statement
  • do statement while (condition)

.4确定循环

  • for (计数器变量初始化, 检测, 更新)
  • 检测两个浮点数是否相等要格外小心。由于舍入误差,最终无法得到精确值,可能会一直处于循环

.5多重选择语:switch语句

.6中断控制流程语句

  • goto为保留字,但是并不可以使用
  • break跳出当前循环体,带标签的break语句用于跳出多重循环
  • continue语句将控制转移到最内层循环的首部
  • 可选语句,即使不使用也能表达出相应的逻辑含义

3.9大数值

  • 已有变量类型不满足精度要求,可使用java.math中包含的两个类:BigInteger和BigDecimal
  • BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算
  • 使用valueOf方法可以将普通的数值转换为大数值:
    BigInteger a = BigInteger.valueOf(100)
  • 无法用算术运算符处理大数。使用add和multiply方法:
    BigInteger c = a.add(b);//c = a+b
    BigInteger d = c.multiply(b.add(BigInteger.valueOf(2)));//d = c*(b+2)
  • API要熟记

3.10数组

  • 用来存储同一类型值的集合的数据结构,通过整型下标访问其中的值
  • type[] name;
  • 数字数组初始化为0,boolean数组初始化为false,对象数组初始化为null
  • 获得元素个数,使用array.length
  • 一旦被创建,不能改变它的大小

.1for each循环

  • for (variable : collection) statement
  • 会遍历数组中的每个元素,而不需要使用下标值
  • 快速打印一维数组:
    Sysytem.out.println(Array.toString(a))

.2数组初始化以及匿名数组

  • int[] smallPrimes = {2,3,5,7,11,13};
    new int[] {17,19,23,29,31,37};//匿名数组
    smallPrimes = new int[] {17, 19, 23, 31};
    int[] anonymous = {17, 19, 23};
    smallPrimes = anonymous;

  • 数组长度可以为0,长度为0和null不同

.3数组拷贝

  • int[] copiedLuckyNumbers = Arrays.copyOf(luckyNumbers, luckyNumbers.length)
  • 多余的数值型将被赋值为0,布尔型将被赋值为false
  • 小于原始数组长度,只拷贝最前面的数据元素

.4命令行参数

  • public static void main(String[] args)
  • 如果使用:
    java Message -g cruel world
    运行程序。那么arg数组中将包含以下内容:
    args[0]: "-g"
    args[1]: "cruel"
    args[2]: "world"

.5数组排序

int a = new int[1000];
...
Arrays.sort(a);//快排

.6多维数组

  • for each不能自动处理二维数组的每一个元素,它按照行,也就是一维数组处理。想访问二维数组的所有元素,需要两个嵌套的循环:
    for (double[] row : a)
    for (double value : row)
    do something with value
  • 快速打印一个二维数组:
    System.out.println(Array.deepToString(a))

.7不规则数组

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

推荐阅读更多精彩内容

  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,789评论 0 2
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    叶总韩阅读 5,066评论 0 41
  • K# Java核心技术卷一 逐一声明每一个变量可以提高程序的可读性。 在Java中,变量的声明尽可能地靠近变量第一...
    兰陵忧患生阅读 435评论 0 1
  • 他穿着灰色的短夹克低着头抽着二十多块的灰狼,也不看路,好像是在找什么东西,但是到了街边第二个巷子他就拐了进去。巷子...
    懋帝阅读 717评论 0 0