Java 学习记录一:入门

入门

一个简单的Java程序

public class FirstSample{
    public static void main(String[] args){
        System.out.println("We will not use 'Hello world'!");
    }
}

一个简单的Java程序如上。
关键字public称为访问修饰符,它用于控制程序的其他部分对这段代码的访问级别。
关键字class表明Java程序中的所有内容都包含在类中,其后紧跟类名。
类名的标准命名规范是:以大写字母开头的名词,以及驼峰命名法。
源代码的文件名必须和公共类的名字相同,并使用.java作为扩展名
根据Java语言规范,main方法必须声明为public
花括号表示方法体的开始和结束。

注释

Java中有三种注释:

  1. //。双斜杠表示单行注释。
  2. /* */表示块状注释。
  3. /** */可以用来自动地生成文档。

数据类型

Java是一种强类型语言,必须为每一个变量声明一种类型。
一共有8种基本类型,其中有四种整形、两种浮点型、一种表示字符编码的char、和一种布尔值boolean。

整形

  • int 4字节
  • short 2字节
  • long 8字节
  • byte 1字节

一般而言,int最常用。但是如果表示星球上的居住人数,就需要使用long类型了。
byteshort类型主要用于特定是应用场合,例如底层的文件处理或者需要控制占用储存空间量的大数组。
在Java中,整形的范围与运行Java代码的机器码无关,这就避免了不同平台或者不同操作系统之间的诸多问题。
long类型数值有一个后缀L,十六进制有前缀0x,八进制只有一个前缀0。因为八进制易混淆,建议不要使用八进制常数。
Java7添加了二进制前缀0b

浮点类型

  • float 4字节
  • double 8字节

大部分应用程序都采用double类型。
float有一个后缀F,如果没有后缀默认为double类型。

char类型

char类型用于表示单个字符。通常用来表示字符常量。
建议不要在程序中使用char类型,除非确实需要对UTF-16代码单元进行操作。最好将需要处理的字符串用抽象数据类型表示。

boolean类型

用于表示trueflase

变量

数学函数与常量

关键字final可以用于声明常量,被声明的常量只能被赋值一次。
Math类提供了一些常用的数学函数,如三角函数、舍入、对数等。

数值类型之间的转换

在程序运行时,经常需要将一种数值类型转换为另一种。
强制转换可以通过(int)123.4这样的方式进行,这样会将小数点后的数字全部舍去。

字符串

子串

String类的subString方法可以从一个较大的字符串中提取出一个子串。
String s = s.subString(0,3)取出的就是前三个字符。

拼接

Java语言允许使用+号链接两个字符串。
字符串与一个非字符串的值进行凭借时,后者被转换成字符串。

不可变字符串

String类没有提供用于修改字符串的方法,如果希望将字符串的内容修改,不能直接修改字符串当前位置的字符。
只能用subString+来拼接。

检测字符串是否相等

String类给出了equals方法可以判断两个字符串是否相等,返回布尔值。
注意不要用==运算符进行字符串比较。

空串与Null串

空串是长度为0的字符串,可以用equals方法检查是否为空。
空串是一个Java对象,有自己的串长度和内容。
不过String还可以放一个特殊的值:Null

字符串API

String类包含了50多个方法,绝大多数都很有用。

int codePointAt(int index) //返回给定位置开始的代码点。
int compareTo(String other) //按照字典序比较,相当于C语言的strcmp方法。
boolean endWith(String suffix) //检查字符串尾是否是suffix。
boolean equals(String other) //判断两字符串是否相同。
boolean equalsIgnoreCase(String other) //忽略大小写。
int indexOf(String str)
int indexOf(String str, int fromIndex)
int indexOf(int cp)
int indexOf(int cp, int fromIndex)
//返回与字符串str或代码点cp匹配的第一个字符串的开始位置。这个位置从索引0或者fromIndex开始计算。
int length() //返回长度。
int codePointCount(int startIndex, int endIndex) //返回代码点数量。
String replace(CharSequence oldString, CharSequence newString)
//返回一个新字符串,这个字符串用newString替换了所有oldString。
String subString(int beginIndex)
String subString(int beginIndex, int endIndex)
//返回子串。
String toLowerCase()
String toUpperCase()
//大小写替换。
String trim()
//删除头尾的空格并返回。

字符串构建器

有时候需要用较短的字符串构建字符串,可以利用StringBuilder提高效率。

StringBuilder builder = new StringBuilder();
builder.append(ch);
builder.append(str);

在需要构建字符串时就调用toString方法,就可以得到当前构造器中的字符序列。

输入输出

读取输入

标准输入流使用Scanner对象。

Scanner in = new Scanner(System.in);
System.out.print("what is your name?");
String name = in.nextLine();
//这里使用nextLine是因为输入有可能包含空格。
//想要读取一个单词的话可以使用`next`方法。
String firstName = in.Next();
System.out.print("How old are you?");
int age = in.nextInt();

因为输入是可见的,所以Scanner不适合用来读取密码。
Console可以解决这个问题。

Console cons = System.console();
String username = cons.readLine("User name: ");
char[] passwd = cons.readPassword("Password: ");

为了安全,返回的密码保存在一个一维字符数组中,处理之后应当马上用一个填充值覆盖数组元素。

大数值

如果基本的整数和浮点数进度不能够满足需求,那么可以使用java.math中的两个很有用的类:BigIntegerBigDecimal
这两个类可以处理包含任意长度数字序列的数值。
使用静态的valueOf方法可以将普通的数值转换为大数值。
不过不能用熟悉的算术运算符来处理大数值,只能用addmultiply方法。

BigInteger add(BigInteger other)
BigInteger subtract(BigInteger other)
BigInteger multiply(BigInteger other)
BigInteger divide(BigInteger other)
BigInteger mod(BigInteger other)
int compareTo(BigInteger other) // 比较
static BigInteger valueOf(long x)

数组

特性

对于数组,有另一种更加简洁的遍历方法。
for (int i: a)
想要打印数组可以通过toString方法来转成字符串进行输出。

初始化、匿名数组

int[] a = { 1, 2, 3, 4, 5 };
int[] a = new int[] { 1, 2, 3, 4, 5 };

数组拷贝

int [] b = a;
a[5] = 12;

这样是传入了引用,修改a中的值,b中的值同样也被修改了。
要拷贝值的话可以使用Arrays类的copyOf方法。
int[] a = Arrays.copyOf(b, b.length);
第二个参数是新数组的长度,也可以用来增加数组的大小。
a = Arrays.copyOf(a, 2 * a.length);

数组排序与查找

排序可以使用Arrays类的sort方法。
这个方法使用了优化的快速排序算法。
查找可以使用Arrays类的binarySearch方法。
这个方法使用了二分搜索算法来查找值v。如果查找成功,返回相应的下标,否则返回负值。

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

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,605评论 18 399
  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,257评论 0 16
  • 这是 chaim “ 365 日写作计划”第 3 天的写作内容。 今天没什么准备,所以写了一篇流水账。 早上大概 ...
    chaim阅读 288评论 4 2
  • 今天的练习是get了一个新技能,类似水波纹的立体数字效果,不过因为是收费课程的内容,所以无法进行制作步骤的分...
    爱睡觉de猪阅读 539评论 4 8
  • RunLoop,循环运行的意思,处理APP中的各种事件,让程序保持运行,这也就是我们应用能够一直保持运行的原因啦。...
    木子小静阅读 460评论 0 2