JAVA 基础知识梳理
JAVA基础
java 特性
封装:
- 封装指的是属性私有化,根据需要提供setter和getter方法来访问属性。即隐藏具体属性和实现细节,仅对外开放接口,控制程序中属性的访问级别。
- 目的:增强安全性和简化编程,使用者不必在意具体实现细节,而只是通过外部接口即可访问类的成员。
继承:
- 继承是指将多个相同的属性和方法提取出来,新建一个父类。
- Java中一个类只能继承一个父类,且只能继承访问权限非private的属性和方法。 子类可以重写父类中的方法,命名与父类中同名的属性。
- 目的:代码复用。
多态:
- 多态可以分为两种:设计时多态和运行时多态。
- 设计时多态:即重载,是指Java允许方法名相同而参数不同(返回值可以相同也可以不相同)。
- 运行时多态:即重写,是指Java运行根据调用该方法的类型决定调用哪个方法。
- 多态目的:增加代码的灵活度。
抽象:只公开与数据类型交互有意义的操作,对外界隐藏了所有实现细节
Java 三大版本
一次编写 到处运行 (jvm)跨平台
- javaSE:标准版(桌面程序)
- javaME:嵌入式开发(手机,家电)
- javaEE:企业级开发(web端,服务器开发)
JDK JRE JVM
JDK:Java Development Kit java开发工具包,用来开发Java程序的,针对java开发者
JRE:Java Runtime Environment java运行时环境,针对java用户
JVM:Java Virtual Machine java虚拟机 用来解释执行字节码文件(class文件)的
JDK包涵了JRE
JRE包涵了JVM
数据类型
强类型语言:要求变量的使用严格符合规定,所有变量都必须先定义后才能使用。
基本数据类型
基本数据类型只有四类八种
整数类型
byte 占用1个字节 1byte = 8bits 默认值为0
short 占用2个字节 1byte = 16bits 默认值为0
int 占用4个字节 1byte = 32bits 默认值为0
long 占用8个字节 1byte = 64bits 默认值为0L
boolean类型
占1位 true/false 默认值false
浮点型
float 单精度浮点型 占用4位 1float = 32 bits 默认值0.0f
double 单精度浮点型 占用8位 1float = 64 bits 默认值0.0d
字符类型
char 可以存储任何字符 例如 char a = 'A'
对应包装类:Byte Short Character Integer Long Boolean Double Float
数值类型 | 字节范围 |
---|---|
byte | 占1个字节 -128 —127 |
short | 占2个字节 -32768—32767 |
int | 占4个字节 -2147483648—2147483647 ±21亿 |
long | 占8个字节 -9223372036854775808—9223372036854775807 |
float | 占4个字节 |
double | 占8个字节 |
char | 占2个字节 |
boolean | 占1个字节 true/false |
进制问题:
public class demo {public static void main(String[] args) {//整数类型 二进制0b开头 十进制 八进制0开头 十六进制0x开头int i = 10;int i2 = 010; //8进制int i3 = 0x10; //16进制 0-9 A-FSystem.out.println(i);System.out.println(i2);System.out.println(i3);//浮点数//float 比较离散 有舍入误差 算出的值都是约等于 接近但不等于//doublefloat f = 1.1111f;double d = 1.1111;System.out.println(f);System.out.println(d);System.out.println(f==d);//falsefloat fl = 1234567821341423412f;float fl2 = fl+1;System.out.println(fl==fl2);//true//字符型char c = 'A';char c1 = '我';System.out.println((int)c);//65System.out.println((int)c1);//25105//布尔类型boolean flag = true;if (flag == true){}if (flag){}}
}
10
8
16
false
true
引用数据类型
类
接口
数组
字节
位(bit):计算机内部存储数据的最小单位
字节(byte):是计算机中数据处理的基本单位,一般使用B表示
1B(byte,字节)= 8bit
字符:指计算机中使用的字母,数字,字和字符。
1bit表示1位
1Byte表示一个字节 1B = 8b
1024B = 1kb
1024kb = 1M
1024M = 1G
注:电脑中32位系统和64位系统
32位系统最大内存只能扩容到32gb 64位系统可支持128g
类型转换
强制转换:变量名 高->低
自动转换:低->高
- 不能对布尔值类型转换
- 不能吧对象类型转换为不相干类型
- 在把高容量转换低容量时候强制转换
- 强制转换可能存在内存溢出,或者精度丢失
变量
- 每一个变量必须声明其类型
- 类型可以是基本类型,也可以是引用类型
- 变量名必须是合法的标识符
- 变量名是一条完整语句,分号结尾
int i = 10;
//数据类型 变量名 = 值
变量的作用域
- 类变量 (加static关键字,类加载的时候就创建)
- 实例变量 (在对象中,可以不对其初始化值,有默认值)
- 局部变量 (在方法中,必须声明和初始化)
变量命名规范
- 所有变量,方法名,类名,见名知意
- 类成员变量:首字母小写和驼峰原则
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线
- 类名:首字母大写和驼峰原则
- 方法名:首字母小写和驼峰原则
常量
- 初始化后不能改变再改变值
- 一般用大写
final 常量名 = 值
final String name = "w";
运算符
- 算数运算符:+,-,*,/,%,++,–
- 赋值运算符:=
- 关系运算符:>,<,>=,<=,==,!= instance of
- 逻辑运算符:&&,||,!
- 位运算符:&,|,^,~,>>,<<,>>>
- 条件运算符:?,:
- 扩展赋值运算符:+=,-=,*=,/=
public class Demo04 {public static void main(String[] args) {int a = 1;int b = 1;System.out.println(a++);//1 先赋值,后自增System.out.println(--b);//0 先自增,后赋值int c = 10;int d = 3;System.out.println(c%d);//取模 求余数 }
}
public class Demo05 {public static void main(String[] args) {//与 或 非boolean a = true;boolean b = false;System.out.println(a&&b);//逻辑与运算:两个变量都为true,结果才为trueSystem.out.println(a||b);//逻辑或运算:两个变量有一个为true,结果就为trueSystem.out.println(!(a&&b));//取反:如果为真,则变为假 如果为假,则变为真//短路与:如果左边为false,结果为false,不会运算后面等式//短路或:如果左边为true,结果为true,不运算后边等式}
}
public class Demo06 {public static void main(String[] args) {int a = 10;int b = 20;a+=b;//a=a+ba-=b;//a=a-b;System.out.println(a);int c =10;String aq = String.valueOf(c);//字符串连接符System.out.println(""+a+b);//1020 字符串在前转成string 会进行拼接System.out.println(a+b+"");//30 字符串在后先相加 再转换成字符串}
}
关键字
关键字 | 含义 |
---|---|
abstract | 表明类或者成员方法具有抽象属性 |
assert | 断言,用来进行程序调试 |
boolean | 基本数据类型之一,声明布尔类型的关键字 |
break | 提前跳出一个块 |
byte | 基本数据类型之一,字节类型 |
case | 用在switch语句之中,表示其中的一个分支 |
catch | 用在异常处理中,用来捕捉异常 |
char | 基本数据类型之一,字符类型 |
class | 声明一个类 |
const | 保留关键字,没有具体含义 |
continue | 回到一个块的开始处 跳过 |
default | 默认,例如,用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现 |
do | 用在do-while循环结构中 |
double | 基本数据类型之一,双精度浮点数类型 |
else | 用在条件语句中,表明当条件不成立时的分支 |
enum | 枚举 |
extends | 表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口 |
final | 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量 |
finally | 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块 |
float | 基本数据类型之一,单精度浮点数类型 |
for | 一种循环结构的引导词 |
goto | 保留关键字,没有具体含义 |
if | 条件语句的引导词 |
implements | 表明一个类实现了给定的接口 |
import | 表明要访问指定的类或包 |
instanceof | 用来测试一个对象是否是指定类型的实例对象 |
int | 基本数据类型之一,整数类型 |
interface | 接口 |
long | 基本数据类型之一,长整数类型 |
native | 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的 |
new | 用来创建新实例对象 |
package | 包 |
private | 一种访问控制方式:私用模式 |
protected | 一种访问控制方式:保护模式 |
public | 一种访问控制方式:共用模式 |
return | 从成员方法中返回数据 |
short | 基本数据类型之一,短整数类型 |
static | 表明具有静态属性 |
strictfp | 用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范 |
super | 表明当前对象的父类型的引用或者父类型的构造方法 |
switch | 分支语句结构的引导词 |
synchronized | 表明一段代码需要同步执行 |
this | 指向当前实例对象的引用 |
throw | 抛出一个异常 |
throws | 声明在当前定义的成员方法中所有需要抛出的异常 |
transient | 声明不用序列化的成员域 |
try | 尝试一个可能抛出异常的程序块 |
void | 声明当前成员方法没有返回值 |
volatile | 表明两个或者多个变量必须同步地发生变化 |
while | 用在循环结构中 |
关键字一律用小写字母标识,按其用途划分为如下几组。
- 用于数据类型。 用于数据类型的关键字有 boolean、byte、char、 double、 false、float、int、long、new、short、true、void、instanceof。
- 用于语句。 用于语句的关键字有break、case、 catch、 continue、 default 、do、 else、 for、 if、return、switch、try、 while、 finally、 throw、this、 super。
- 用于修饰 用于修饰的关键字有 abstract、final、native、private、 protected、public、static、synchronized、transient、 volatile。
- 用于方法、类、接口、包和异常。 用于方法、类、接口、包和异常的关键字有 class、 extends、 implements、interface、 package、import、throws。
- 还有些关键字如cat、 future、 generic、innerr、 operator、 outer、rest、var等都是Java保留的没有意义的关键字。
- Java还有3个保留字:true、false、null。它们不是关键字,而是文字。包含Java定义的值。和关键字一样,它们也不可以作为标识符使用。
流程控制
1. Scanner
java.util.Scanner 类可以获取用户的输入
Scanner scanner = new Scanner(System.in);
通过Scanner类的next()与nextLine()方法获取输入的字符串,读取前使用hasNext和hasNextLine()判断是否还有输入的数据
Next
- 一定要读取到有效字符后才可以结束输入
- 对输入有效字符之前遇到的空格,next()方法会自动将其去掉
- 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
- next()不能得到带有空格的字符串
nextLine()
- 以Enter为结束符,也就是说返回的是输入回车之前的所有字符
- 可以获得空格
public class Demo01 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);if (scanner.hasNext()){String s = scanner.next();//空格后面读取不到 以空格结束System.out.println(s);}if (scanner.hasNextLine()){String s1 = scanner.nextLine();//可以读取空格后面字符 以Enter结束System.out.println(s1);}scanner.close();}
}
public class Demo02 {public static void main(String[] args) {double sum = 0;//和int num = 0;//个数Scanner scanner = new Scanner(System.in);while(scanner.hasNextDouble){doouble d = scanner.nextDouble();num++;sum = sum + d;}System.out.println(sum);System.out.println(num);System.out.println(sum/num);//平均值scanner.close();}
}
2. if语句
//if单选择结构
if(){}
//if双选择结构
if(){}else{}
//多选择结构
if(){}else if(){}else if(){}else{}
//if嵌套结构
if(){if(){}
}
3. Switch语句
- switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
- switch语句中变量的类型可以是byte,short,int,char
- jdk 7 开始支持string类型
- 同时case标签必须为字符串常量或字面量
- 每个case后带上break,防止case穿透
public class Demo03 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入");String s = scanner.nextLine();switch(s){case "A":System.out.println("a");break;//加上break防止case穿透case "B":System.out.println("b");break;case "C":System.out.println("c");break;default:System.out.println("...");}scanner.close();}
}
4. while 循环
while(布尔表达式){//循环内容
}
- 只要布尔表达式为true,循环就会一直执行下去
- 大多数情况下会让循环停止下来,需要一个让表达式失效的方式结束循环
- 少部分情况需要循环一直执行,比如服务器的请求相应监听
- 循环条件为true就会造成无限循环,死循环,正常业务中需要避免,回影响程序性能
public class Demo04 {public static void main(String[] args) {//计算1+2+...+100int i = 0;int sum = 0;while (i<100){i++;System.out.println(i);sum = sum + i;}System.out.println(sum);}
}
5. do while 循环
do{//代码块
}while(布尔表达式);
- 对于do while而言,如果不满足条件,则不能进入循环
- do while 和while区别
- while先判断后执行,do…while先执行后判断
- do…while总是保证循环体至少执行一次
public class Demo05 {public static void main(String[] args) {int i = 0;int sum = 0;do {i++;sum = sum + i;}while (i<100);System.out.println(sum);}
}
6. for循环
- for循环是支持迭代的一种通用结构
- for循环执行的次数是在执行前就确定的
for(初始化,布尔表达式,更新){//代码块
}
for(int i = 0;i < 10;i++){//代码块
}
计算0-100之间奇数和偶数的和
public class Demo06 {public static void main(String[] args) {//计算0-100之间奇数和偶数的和int i = 0;int jiSum = 0;int ouSum = 0;while (i<=100){if (i%2==0){ouSum = ouSum + i;}else {jiSum = jiSum + i;}i++;}System.out.println(jiSum);System.out.println(ouSum);}
}
public class Demo07 {public static void main(String[] args) {//计算0-100之间奇数和偶数的和int jiSum = 0;int oiSum = 0;for (int i = 0; i <= 100; i++) {if (i%2==0){jiSum+=i;}else {oiSum+=i;}}System.out.println(jiSum);System.out.println(oiSum);}
}
用while或for循环输出1-1000之间能被5整除的数,并且每行输出三个
public class Demo08 {public static void main(String[] args) {//用while或for循环输出1-1000之间能被5整除的数,并且每行输出三个for (int i = 1; i <= 1000; i++) {if (i%5==0){System.out.print(i+"\t");}if (i%15==0){System.out.println();}}}
}
打印九九乘法表
public class Demo09 {public static void main(String[] args) {//打印九九乘法表for (int j = 1; j <= 9; j++) {for (int i = 1; i <= j; i++) {System.out.print(j+"*"+i+"="+j*i+"\t");}System.out.println();}}
}
7. 增强for循环
for(声明语句:表达式){//代码块
}
- 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等
- 表达式:就是要访问的数组名,或者返回值为数组的方法
8. break continue
- break在任何循环体语句的主题部分,均可用break控制循环的流程。==break用于强行退出循环,==不执行循环体中剩余的语句。break语句也可以在switch语句中使用
public class breakDemo {public static void main(String[] args) {int i = 0;while (i<10){i++;if (i==5){break;}System.out.println(i);}}
}
- continue语句用在循环语句体中,用于跳过本次循环,继续进行下一次循环判断
public class continueDemo {public static void main(String[] args) {int i = 0;while (i<100){i++;if (i%10==0){continue;//跳过10,继续循环}System.out.print(i+" ");}}
}
9. 三种循环区别
- 三种循环的区别
- for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
- do…while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)
- for循环和while的区别
- 条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
- 条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用
- 死循环(无限循环)的三种格式
- for(;
JAVA 基础知识梳理相关推荐
- 零基础学习Java真的很难?初学者必须了解的Java基础知识梳理
作为最受欢迎的编程语言之一,Java是很多人转行的首选.对于零基础而言,在学习Java前要了解哪些语言特征和常识呢?下面,小编就来分享一下零基础学习Java者必须了解的Java语言常识以及知识. 从1 ...
- 干货!Java基础知识梳理,绝对经典
作为最受欢迎的编程语言之一,Java是很多人转行的首选.对于零基础而言,在学习Java前要了解哪些语言特征和常识呢?下面,就分享零基础学习Java必须了解的Java语言常识以及知识. 从1995年诞生 ...
- Java基础知识梳理(五)从源码了解字符串
这篇文章来自我的博客 之前写过一篇关于 String 类.StringBuilder 和 StringBuffer 的基本介绍,今天从 String 类的部分源码来看 String 类(本文基于 JD ...
- java基础知识梳理_java基础知识点梳理3
集合框架 特点: 1:对象封装数据,对象多了也需要存储.集合用于存储对象. 2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合.因为集合是可变长度的. 集合和数组的区别: 1:数组是固定长度 ...
- Java基础知识梳理
- Java 基础知识总结(下)-王者笔记《收藏版》
上一篇 Java基础知识学习总结之(上) 下一篇 Java 集合容器篇面试题 (上) java毕业设计项目<100套>推荐 毕设/私活/大佬必备,一个挣钱的开源前后端分离脚手架 2W字梳 ...
- 思维导图系列之Java多线程知识梳理
上一系列:思维导图系列之MySQL知识梳理 从多线程的基础.线程同步.线程间通信.线程调度.线程池.并发容器.线程安全的集合.原子变量等方面去罗列主要知识点,以思维导图的方式进行呈现,可以让读者更条理 ...
- 23篇大数据系列(一)java基础知识全集(2万字干货,建议收藏)
大数据系列爽文,从技术能力.业务基础.分析思维三大板块来呈现,你将收获: ❖ 提升自信心,自如应对面试,顺利拿到实习岗位或offer: ❖ 掌握大数据的基础知识,与其他同事沟通无障碍: ❖ 具备一定的 ...
- 自用的快速复习Java基础知识,不适用于每一个人
自用的快速复习java基础知识,不适用于每一个人 问题背景 1. 类定义出来的变量称为**对象** [IDEA安装](https://www.jb51.net/article/193853.htm) ...
最新文章
- stream map方法_Java Stream中map和flatMap方法
- DOT:视觉SLAM的动态目标物跟踪
- 脑电植入:治疗抑郁症的新方法?重磅!UCSF研究人员成功治疗一例重度抑郁症患者...
- FJ省队集训DAY3 T1
- linux查看内核版本、系统版本、系统位数(32or64)
- TensorFlow各版本下载地址,强烈推荐
- Swift - static和class的使用
- Fescar TC-rollback流程
- 李彦宏开年内部信:2018营收破千亿,做出好产品的百度已归来
- WPS检测到字体缺失Windows字体包方正字体库
- MybatisCodeHelperPro的使用
- 我读过关于面试最好的一篇文章
- cherry键盘使用备忘
- React之lazy与suspense
- 倍福触摸屏维修倍福工控机维修CP3916-0010详解
- torch.logical_and()方法
- paddleocr学习笔记(一)从官网开始
- 中英离线翻译mac_Translatium for mac(翻译工具)
- JAVA自学之路 [原创 - 尚学堂科技 - 马士兵老师]
- web网页设计期末课程大作业:动漫主题网站设计——关于我转生史莱姆这件事(6页)HTML+CSS
热门文章
- 提取PSD中的图片素材
- 耶鲁华裔硕士被击数枪身亡!嫌犯疑是MIT博士生,曾获奥数银牌
- 12306改签和变更到站有什么区别
- window系统80端口被占用 ,解除了NT Kernel System PID=4 进程占用80端口
- Vue中v-model的使用及案例
- 盛世昊通联合买旺汽贸,重磅推出思皓新能源车系列
- Manjaro修改IP地址
- c语言高精度计算n的阶乘,高精度计算n阶乘的c语言源代码和解释
- Java---Write once, run anywhere
- 基于深度残差收缩网络的故障诊断 Deep Residual Shrinkage Networks for Fault Diagnosis
- 零基础学习Java真的很难?初学者必须了解的Java基础知识梳理
- for(;