[笔记]Java基本知识

前言

此篇文章主要总结一些 Java 面向对象程序设计的基本知识,是对 Java 学习中的一些基本的、较为简单的知识的一个全面总结与回顾。内容主要是一些各程序语言基本通用的基础知识,以及简单的面向对象编程的基本知识。会列出一些需要掌握的重点。
全篇以总结为主,主要对一些细节加以提醒,不会过于深入。

一、基本程序设计结构

1.数据类型

Java 共有 8 种基本类型,分别是 4 种整型(int、short、long、byte),2 种浮点型(float、double),1 种字符类型(char)和 1 种 boolean 类型。

Java 中的整型所占字节数与平台无关,是固定的。

类型 存储需求(字节)
int 4
short 2
long 8
byte 1

L 或 l 后缀表示 long 型,0X 或 0x 前缀表示十六进制,0 前缀为八进制。从 Java 7 开始,0b 或 0B 前缀表示二进制,支持数字加下划线以便于阅读(eg. 100_000_000 , 0B1111_1010)
Java没有无符号 (unsigned) 形式的类型。

浮点型大都采用 double 型 (8 字节),使用 float 型 (4 字节)的情况较少。float 型数有后缀 F 或 f 。
Java提供大数值类型用来处理 int 和 double 精度不够要求的情况。

char 型和 boolean 型不多赘述。

2.变量与常量

变量声明之后,必须进行显式初始化后才能使用。变量的声明尽量靠近其第一次使用的地方,但是要注意变量的作用域问题。
常量用 final 关键字来指示,常量一旦被赋值,就不能更改。常量名一般全为大写。常量加 static 修饰,则为类常量,需定义在 main 方法外部,可供同类的多个方法使用。再加 public 修饰,则其他类的方法也可以使用。
C语言用来定义常量的 const 在Java中没有使用,但是是保留的关键字。

3.运算符

算术运算符(包括自增、自减和赋值结合运算符)和逻辑运算符常规使用即可。/ 运算两边都为整数时,是整数除法。
位运算有 ^ ~ & | << >> >>> 。|和& 也可以用在布尔值上,>>> 会在高位补 0。
枚举类型实际上是一个类类型。比较时,不使用 equals 直接使用 ==。

4.字符串

字符串类型是引用类类型。
使用 substring 方法可获得子串,一个参数时截取索引之后(含)的字符串(索引从 0 开始),两参数则截取两参数之间(含第一个索引,不含第二个索引)的字符串 且长度为 end - begin;

String s1 = "hello!";
String s2 = s1.substring(2); //s2="llo!"
String s3 = s1.substring(1,3); //s3="el",长度为 (3-1=2)

使用 equals 方法检测字符串是否相等( s.equals(t) ),两边也可以是字符串字面量("hello"形式),比较时不区分大小写可使用 equalsIgnoreCase 方法,== 运算符只检测两字符串是否存储在同一位置,不进行检测是否相等。
StringBuilder 类用于缓存字符串,添加时调用 appends 方法,完成后使用 toString 方法即可得到一个 String 对象。

5.输入输出

标准输出流调用System.out.println 及相关方法即可(Java 5 之后提供了 C 语言的格式化输出 printf )。
输入需要先构造一个 Scanner 对象,并与“标准输出流” System.in 关联。
Scanner in = new Scanner (System.in);
然后调用相关方法即可进行输入。
String name = in.nextln
nextln 用于读取一行,next 读取下一单词(空格间隔),nextInt 读取下一整数等。

文件读取需要用 File 对象构造一个 Scanner 对象,如下:
Scanner in = new Scanner(Paths.get("myfile.txt"),"UTF-8");
文件名中包含反斜杠时,需要额外加一个反斜杠。
写入文件时,需要构造一个 PrintWriter 对象:
PrintWriter out = new PrintWriter("myfile.txt","UTF-8");
文件不存在时将创建一个文件。可以像 System.out 一样使用 print、println 和 printf 命令。

6.控制流程

Java 中,不能在嵌套的块(block)中声明同名的变量,但 C++ 中允许这么做。

条件语句(if else)和 while / do while 循环常规使用。for 循环注意语句内定义的变量不能在循环体之外使用。

switch 语句用于处理多重循环,但较易出错,不推荐使用。格式如下:

int i=3
switch (i)
{
    case 1 : statement1 ; break ;
    case 2 : statement2 ; break ;
    default : statement3 ; break;
}

执行时依次将小括号的值(i)和case 的值匹配,成功则执行对应语句,若都不能匹配则执行默认语句(default),没有 default 则不执行。
case 后的匹配值可以有多种类型,但必须是常量表达式。
break 语句作用是跳出语块,匹配成功并执行语句后,如果没有 break,则会继续执行后续的语句(不管有没有和 case 匹配),直到遇到 break 语句终止。

break 语句和 continue语句可以用来跳出循环,continue跳出本次循环,break 终止循环。两者配合标签使用可以达成 goto 语句的效果。

7.数组

数组初始化有两种方法,可以显示赋值,也可以 new 运算符创建
int[] a = new int[100]; //要确定数组大小

for each循环可以方便地遍历数组。

int[] arr = {1,2,3,4,5};
for(int b : arr){
   System.out.println(b);
}

数组可以直接赋值拷贝到另一个数组中,这时它们两个引用同一个数组,改变一个数组中的元素,另一个数组也随之改变。可以使用 Arrays.copyOf 方法将数组的值拷贝到另一数组,第二个参数来确定新数组大小,可以利用这个来增加(减小)数组大小。
int[] copyArr = Arrays.copyOf(arr,7);//增加了两个容量

main 方法中的 String[] args 数组是用来接收命令行参数的。比如,一般命令行运行程序命令为 java calssName,可以将命令添加参数,如:java className hello world 此时 args 数组将有值,args[0]:hello ,args[1]:world。

二、面向对象程序设计概述

对象变量只是引用了一个对象,没有实际包含对象。

构造器与类同名,可以有多个(以参数的个数、类型来区分),没有返回值。

可以将实例域定义为 final ,构建对象时必须初始化这样的域,并且不能再被更改。

静态域和静态方法
static 修饰符将确定静态域和静态方法。
静态域属于类,所有对象都有相应的拷贝。静态常量使得常量可以直接通过类访问,而不需要构造对象。比如说 Math 类中的 PI,可以直接通过 Math.PI 获得而不用构造 Math 的实例。
静态方法是一种不能向对象实施操作的方法,一般有两种情况使用静态方法:一种是方法不需要访问对象状态,其参数直接通过显式参数提供(如 Math.pow );另一种是方法只需要访问类的静态域。
main 方法也是静态方法,利用其不对对象操作的特性,可以将每个类添加一个 main 方法以方便进行单元测试,当类作为其他类的一部分时,该 main 方法永远不会执行。

方法参数
Java 程序采用按值调用

对象构造
重载
多个相同名称的方法,有不同的参数,便产生了重载。构造器也是一种方法,所以也能重载。方法名以及参数类型构成方法的签名,返回类型不是方法签名的一部分。
如果构造器没有显式地给域赋初值,则会赋为默认值。无参数构造器如果没有编写,系统会默认提供。但有一个及以上的有参数构造器,系统就不会提供无参数的构造器。
构造器的参数名有两种命名方式推荐,一种是在参数前加 a 如 name 对应 aName,另一种是直接用参数名,在构造器种使用 this 关键字来访问实例域,如下:

public Employee(String name,int age){
    this.name = name;
    this.age = age;
}

可以使用 this 在构造器种调用同一类的另一构造器。


import 导入包,还可以导入特定的域与方法。
package将类放入包中,必须放在开头。

文档注释
使用 /
** */ 进行文档注释
这一块较为复杂,暂不详细记录

继承
使用 extends 表示继承,继承的子类只需实现跟父类的不同之处。将通用功能放超类,特殊用途放子类是常用做法。
覆盖方法(override)重写父类的方法,当需要使用父类的方法时,用super 关键字。super 关键字还可以用来调用父类构造器。

使用 final 可以阻止继承

Object :所有类的超类
equals 方法检测对象是否和另一个对象相同
hashCode 方法默认返回对象存储地址,要和 equals 同时重新定义。
toString 方法F返回类名,加上方括号括起来的域值。

参数数量可变的方法
printf方法就是一个经典的可变参数方法。
定义可变参数方法时,在参数类型后加 ... 即可实现可变参数,但参数具体怎么处理需要自己实现

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

推荐阅读更多精彩内容

  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,537评论 0 6
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,642评论 0 11
  • 今天星期三下午,又上了我最喜欢的科创课,今天我们都上第九课啦,到第12课的时候,我们就会做一个小卡车,如果...
    李佳晨宝宝阅读 92评论 0 0
  • 今天记录就从第二章的数学素质的第二个内涵讲起—数学抽象和概括能力。 书中提到了为什么要让学生在数学学习中经历抽象概...
    温馨雪儿阅读 248评论 0 0
  • 一直都在用尽可能简短的文字去记录自己的心情,企图在表达即使寥寥数字也能证明我在想你。“你的近况,断续从朋友口...
    肉夹馍小姐阅读 500评论 16 5