Java语言的特点

1.面向对象

面向对象(OOP)就是Java语言的基础,也是Java语言的重要特性。面向对象的概念:生活中的一切事物都可以被称之为对象,生活中随处可见的事物就是一个对象,我们可以将这些事物的状态特征(属性)以及行为特征(方法)提取并出来,并以固定的形式表示。

2.简单好用

Java语言是由C和C++演变而来的,它省略了C语言中所有的难以理解、容易混淆的特性(比如指针),变得更加严谨、简洁、易使用。

3.健壮性

Java的安全检查机制,将许多程序中的错误扼杀在摇蓝之中。 另外,在Java语言中还具备了许多保证程序稳定、健壮的特性(强类型机制、异常处理、垃圾的自动收集等),有效地减少了错误,使得Java应用程序更加健壮。

4.安全性

Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击,从而可以提高系统的安全性。

5.平台无关性

Java平台无关性由Java 虚拟机实现,Java软件可以不受计算机硬件和操作系统的约束而在任意计算机环境下正常运行。

6.支持多线程

在C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持。多线程机制使应用程序在同一时间并行执行多项任务,该机制使得程序能够具有更好的交互性、实时性。

7.分布式(支持网络编程)

Java语言具有强大的、易于使用的网络能力,非常适合开发分布式计算的程序。java中提供了网络应用编程接口(java.net),使得我们可以通过URL、Socket等远程访问对象。

8.编译与解释共存

Java 是编译与解释共存的语言


Java语法基础

标识符: 用来标识类名、对象名、变量名、方法名、类型名、数组名、文件名的有效字符序列。

合法的标识符:

  • 由字母、数字、下划线“_”、美元符号“$”或者“¥”组成,并且首字符不能是数字。
  • 不能把java关键字和保留字作为标识符。
  • 标识符对大小写敏感。

关键字:Java语言中已经赋予了特定含义的

合法的标识符:

  • 由字母、数字、下划线“_”、美元符号“$”或者“¥”组成,并且首字符不能是数字。
  • 不能把java关键字和保留字作为标识符。
  • 标识符对大小写敏感。

关键字:Java语言中已经赋予了特定含义的

保留字:const、goto,Java版本中尚未使用,但以后版本可能会作为关键字使用

变量:程序运行期间可以被改变的量。在程序中使用变量,必须先创建它并为它取一个名字,并且指明它能够存储信息的类型,这称为“变量声明”,也叫容器的创建。

变量的使用:

  • 变量的声明:数据类型 变量名;
  • 变量的赋值:变量名 = 数据;
  • 变量的操作:放入打印语句进行输出或者进行运算

Java 中的注释有三种:

  • 单行注释
  • 多行注释
  • 文档注释

数据类型

基本数据类型(8个),也称原始数据类型:

引用数据类型(3种):数组、类、接口

类型转换:

  • 自动类型转换,也叫隐式转换
  • 强制类型转换,也叫显式转换

运算符

运算符:一种特殊符号,用以表示数据的运算、赋值和比较数与整数

运算符分类:算术运算符、赋值运算符、比较运算符、逻辑运算符、三元运算符

1.算术运算符

2.赋值运算符

3.比较运算符

4.逻辑运算符

5.三元运算符
条件表达式b?x:y;,先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。


Java流程控制语句

选择结构

if语句:if(条件表达式){ 一条或多条语句 };

if else语句:if(条件表达式) {语句块1} else {语句块2}

 

循环结构

在程序中当要重复性的做某项工作时可以使用循环语句,包括:for循环、while循环、do…while循环。

for循环语句:


while循环语句:

do…while循环语句:

流程跳转

流程跳转语句:break,continue

  • break:在switch中结束case条件判断,在循环体中结束循环
  • continue:作用在循环体中,结束循环体的本次循环,而进入下次循环

数组

数组是数据的集合,一个容器,用来存储任何类型的数据,包括原始数据类型和引用数据类型,但是一旦指定了数组的类型之后,就只能用来存储指定类型的数据。

数组声明的三种方式:

  • 数据类型[] 数组名 = new 数据类型[长度];
  • 数据类型[] 数组名 = {数据,数据,…,数据};
  • 数据类型[] 数组名 = new 数据类型长度[] {数据,数据,…,数据};

一维数组:

  • 数组变量的声明:
    语法:数据类型[] 数组名;,如:int[] num;double[] d;String[] str;

  • 数组对象的创建:
    语法:数组名 = new 数据类型[长度];,如:num = new int[4];,数组声明其长度后不可改变

  • 赋值:
    语法:数组名[下标] = 数据;,如:num[0] = 3;

  • 数组元素的使用及遍历:
    语法:数组名[下标],获取指定下标是数据。

二维数组:

  • 数组变量的声明:
    语法:数据类型[][] 数组名;,如:int[][] num;double[][] d;String[][] str;

  • 数组对象的创建:
    语法:数组名 = new 数据类型[外长度][内长度];,如:num = new int[4][3];,数组声明其长度后不可改变

  • 赋值:
    语法:数组名[外下标][内下标] = 数据;,如:num[0][0]= 3;

  • 数组元素的使用及遍历:
    语法:数组名[外下标][内下标],获取指定下标是数据。


对象与类

对象:客观存在能够相互区分的个体,比如这辆汽车、这个人、这间房子、这张桌子、这株植物、这张支票、这件雨衣。概括来说就是:万物皆对象。

类:若干具有相同属性和行为的对象的群体或者抽象,类是创建对象的模板,由属性和行为两部分组成

类是对象的概括或者抽象,对象是类的实例化。

类的声明

[修饰符] class 类名{//类的声明部分[成员变量][成员方法]
}

成员变量的声明:[修饰符] 数据类型 变量名 [= 初始值];

成员方法的声明:

[修饰符] 返回值类型 方法名([数据类型 参数名,……]){//方法体,该方法完成的功能代码
}

构造器的声明:

[修饰符] 构造器名([数据类型 参数名,……]){//构造器完成的功能代码
}

注意:
①构造器名必须和类名一致
②构造器没有返回值类型
③任何类都含有构造器。如果没有显式地定义类的构造器,
④则系统会为该类提供一个默认的无参的构造器。一旦在类中显式地定义了构造器,系统就不会再为这个类提供默认的构造器了。

类的使用

类变量的声明:类名 对象名;
类对象的创建,赋值给变量:对象名 = new 构造器([参数列表]);

对象属性的赋值:属性:对象名.属性名、对象名.属性名 = 数据;

属性和方法的调用:属性:System.out.println(对象名.属性名);方法:对象名.方法名();

成员变量与局部变量:

  • 成员变量:声明在类中方法体之外、可以有缺省值、可以使用修饰符。作用域:整个类
  • 局部变量:声明在方法体或代码块中、没有缺省值、只能使用final修饰。作用域:当前方法体

参数:参数的本质是特殊的局部变量,只能定义在方法的小括号中

重载

方法的重载OverLoading: 同一个类中定义了多个方法名相同而参数不同的方法

重载在同一个类中,方法名相同,参数不同(参数的个数、顺序、类型不同)

构造器的重载:

方法的返回值类型:

  • 无返回值类型:void,return;//结束方法体
  • 有返回值类型为:数据类型(基本数据类型、引用数据类型),return 数据;//结束方法体,并且返回一条数据

关键字

this关键字:

this是一种特殊的引用,指向当前对象

this的两种使用方法:
如果发生局部变量和成员变量命名冲突时,可以通过this.成员变量名的方式区分成员变量和局部变量。

一个构造方法中需要调用本类的另一个构造方法,可以通过this()的方式调用,但this()必须要书写在第一行。

static关键字:

静态变量: 使用static修饰的成员变量叫做静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。static成员变量的初始化顺序按照定义的顺序进行初始化。

静态方法: 使用static修饰的成员方法叫做静态方法,静态方法可以不依赖于任何对象进行访问(对于静态方法来说,是没有this的),由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。

调用格式:类名.静态变量名 ,类名.静态方法名()

静态内部类(static 修饰类的话只能修饰内部类): 静态内部类与非静态内部类之间存在一个最大的区别: 非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围类,但是静态内部类却没有。没有这个引用就意味着:1. 它的创建是不需要依赖外围类的创建。2. 它不能使用任何外围类的非 static 成员变量和方法。

静态代码块:
是一个以static为前导的代码块,一般用于为类的工作做一些初始化工作,如初始化一些静态变量。一个类中可以有许多静态初始化块,并且它们可以出现在类体的任何地方。运行时系统会保证静态初始化块会按照它们在源代码中出现的顺序被调用

static块可以用来优化程序性能:因为它只会在类加载的时候执行一次

super关键字:
super代表的是父类对象,

使用方式:
super.属性名、super.方法名();用于在子类中调用父类被隐藏的同名实例变量
super([参数列表])用于在子类的构造方法中调用父类的构造方法

每一个子类的构造方法在没有显示调用super()系统都会提供一个默认的super(),super()必须是构造器的第一条语句

final关键字:

final 关键字,意思是最终的、不可修改的,最见不得变化 ,用来修饰类、方法和变量,具有以下特点:

  • 修饰类:类不能继承,final 类中的所有成员方法都会被隐式的指定为 final 方法;
  • 修饰符变量:该变量为常量,,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能让其指向另一个对象。
  • 修饰符方法:方法不能重写

说明:使用 final 方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的 Java 实现版本中,会将 final 方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升(现在的 Java 版本已经不需要使用 final 方法进行这些优化了)。类中所有的 private 方法都隐式地指定为 final。

参考:https://gitee.com/SnailClimb/JavaGuide

访问修饰符
访问修饰符对成员变量和成员方法的访问限定


Java的三大特性

封装

封装指隐藏对象的状态信息(属性),不允许外部对象直接访问对象的内部信息(private实现)。但是可以提供一些可以被外界访问的方法来操作属性。

将类中成员变量private,提供public的get和set方法来控制属性的存取动作,以保证对私有属性操作的安全性:

继承

继承extends:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承单独的那个类即可。多个类可以称为子类,单独这个类称为父类或者超类。

基本语法:

[修饰符] class 子类名 extends 父类名{类体部分
}

继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的属性或方法(对父类进行扩展),也可以拥有父类的属性和方法,并且通过自己的方法再次实现父类的方法(重写)。通过使用继承,可以快速地创建新的类,可以提高代码的重用,程序的可维护性,节省大量创建新类的时间 ,提高我们的开发效率。

Java只支持单继承,不支持多继承。一个类只能有一个父类,不可以有多个父类。Java支持多层继承(继承体系)。Java继承了父类非私有的成员变量和成员方法,但是请注意:子类是无法继承父类的构造方法的。

注意:不要仅为了获取其他类中某个功能而去继承 ,类与类之间要有所属(“is a” )关系

方法的重写:


子类从父类继承的某个实例方法无法满足子类的功能需要时,需要在子类中对该实例方法进行重新实现,这样的过程称为重写,也叫做覆写、覆盖。

方法重写的前提:继承,子类的修饰符大于等于父类,方法名、参数列表、返回值类型必须相同

多态

多态:一种事物的多种形态(多态的前提:继承、重写、向上转型)

通过多态可以提高代码的可重用性,降低模块之间的耦合度。


抽象类

抽象类的概念:
Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类。如:Shape类计算周长和面积的方法无法确定,那么就可以将这样的方法声明为抽象的,以便在具体的子类中进行实现。

抽象类的声明:[修饰符] abstract class 类名 [extends 父类名]{类体}
抽象方法的声明:[修饰符] abstract 返回值类型 方法名([参数列表]);
因为抽象方法无法确定具体执行的功能,所有抽象方法没有方法体,需要在小括号后加上分号

抽象类和普通类除了使用abstract修饰外和普通的类相似,抽象类中可以没有抽象方法,但是一旦某个有抽象方法,那么这个类必须被声明为抽象类。

抽象类的使用:
因为抽象类不是一个具体的类,所以无法实例化,但是抽象类可以用于声明变量
抽象类可以被继承,在子类中实现抽象类的所有抽象方法,以达到抽象类的具体化

接口

在Java中接口不仅仅是程序开发过程中“约定”,更是更加抽象化的抽象类。

接口的声明语法:[修饰符] interface 接口名{[常量];[抽象方法];}

接口实现的语法:[修饰符] class 类名 [extends 父类名] [implements 接口1,接口2,……]{类体部分}

一个类可以实现多个接口,从而解决了Java单继承的缺点。

接口的作用:

  • 提高程序的重用性
  • 提高程序的可扩展性
  • 降低程序的耦合度
  • 实现了多继承

Java知识点总结(超详细)相关推荐

  1. JAVA 正则表达式 (超详细,转)

    转 JAVA 正则表达式 (超详细,转) 2015年03月25日 10:27:57 阅读数:1514 在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍 ...

  2. HTML学习知识点大全-----超详细(各种标签使用讲解及案例)

    HTML学习知识点大全-----超详细(各种标签使用讲解及案例) 1:概念 **最基础的网页开发语言 *Hyper Text Markup language:超文本标记语言超文本:运用了超链接的方法, ...

  3. Java——IO流超详细总结

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 在初学Java时,I ...

  4. JAVA 正则表达式 (超详细)

    新网站上线 欢迎大家 网站交易中心 在这里你可以购买或者出售你的网站. 网站信息发布中心 在这里有各种交易信息的发布.同时提供 一些软件的免费使用(附有源码). 网站博客系统 这里你可以注册自己的博客 ...

  5. Java虚拟机(JVM)超详细面试题

    文章目录 一.Java内存区域 1.1 说一下 JVM 的主要组成部分及其作用? 1.2 说一下 JVM 运行时数据区 1.3 详细的介绍下程序计数器? 1.4 详细介绍下Java虚拟机栈? 1.5 ...

  6. JAVA 正则表达式 (超详细) .

    2019独角兽企业重金招聘Python工程师标准>>> 在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util ...

  7. Java正则表达式(超详细)

    学习Java的同学注意了!!!  学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:183993990  我们一起学Java! 在Sun的Java JDK 1.40版本 ...

  8. Java异常(超详细!)

    1.什么是异常,java提供异常处理机制有什么用? 什么是异常:程序执行过程中的不正常情况. 异常的作用:增强程序的 健壮性. eg. public class ExceptionTest01 {pu ...

  9. java方法区超详细汇总,方法区到底是干什么用的?不懂方法区不能说了解jvm!

    目录 一.运行时数据区结构图 二.栈.堆.方法区的交互关系 三.方法区的理解 官方文档 方法区在哪里 方法区的基本理解 HotSpot中方法区的演进 四.设置方法区大小与OOM 设置方法区内存的大小 ...

  10. 各大公司Java面试题超详细总结

    点击上方"java大数据修炼之道",选择"置顶公众号" 技术文章第一时间送达! 每晚9点,我们不见不散 每日英文 take control of your ow ...

最新文章

  1. MongoDB探索之路(二)——系统设计之CRUD
  2. js:进一步关闭(范围:下一个)
  3. 量子相干与量子纠缠_量子分类
  4. 【网络流24题】No.7 试题库问题 (最大流,二分图多重匹配)
  5. 交换排序-经典的快速排序算法总结
  6. python标准库之参数解析库
  7. 政府门户应该怎样建设?——解读中国政府网站绩效评估标准
  8. Linux学习笔记---使用BusyBox创建根文件系统(三)
  9. Practical JAVA(三)关于final
  10. 编译安装Nginx以及配置运行Drupal 8,实现上传进度功能
  11. 医院病历html模板,三甲医院电子病历模板参考
  12. STM32F401标准固件库配置
  13. STM32存储器 — 2STM32存储器知识的相关应用(IAP、Bit Banding)
  14. jQuery appendTo() 方法
  15. 香港武侠电影十大金曲
  16. Canvas炫酷3D线条动画背景
  17. 如何缩小gif动图的体积?怎样快速压缩gif动图?
  18. 华为模拟器配置vlan教程
  19. android settings$,android settings命令
  20. 怎样安装Safari浏览器扩展!

热门文章

  1. 1112: [POI2008]砖块Klo
  2. 2021-2027全球与中国接入网电信设备市场现状及未来发展趋势
  3. 晶振在ad的哪个库里_关于晶振的问题库
  4. STM32之AD7194驱动
  5. Http历险记(上)
  6. c语言求s=1 x x*x 2,Winhex软件的使用
  7. 阿里云丨以AI助力电力产业变革_创造有为时代——访阿里云人工智能科学家闵万里
  8. atlas老显示进去服务器,ATLAS游戏前期常见问题有哪些?前期常见问题汇总解答
  9. 求五个长方体的体积表面积
  10. RabbitMq(具体怎么用,看这一篇即可)