JavaSE_知识点(上)(截止多态)

Java——一门基于面向对象的编程语言

1.Java体系的划分

①JavaSE:标准版
②JavaEE:企业版
③JavaME:微型版

2.关于JDK,JRE,JVM

定义:

JDK----->Java开发工具箱
JRE----->Java运行环境
JVM----->Java虚拟机 (重点)

关系:

①JDK,JRE存在独立的安装包;
②安装JDK时自动安装JRE与JVM;
③安装JRE时自动安装JVM;
④JVM在不同的操作系统上不同,但Java程序均相同。

3.Java的加载与执行

在这里插入图片描述

4.Java的使用与运行步骤

编译期:
①在硬盘任意位置新建一个“xxx.java”文件;
②使用文本编辑器打开该文件;
③在“xxx.java”文件里编写正确的源代码;
④保存并使用编译器(javac[JDK安装后自带])对文件编译;
⑤报错或生成“xxx.class”文件;
运行期:
⑥若上述流程在Windows系统上编译,可将class文件拷贝到其他操作系统上;
⑦使用JDK自带命令工具(java)执行字节码;
⑧JVM程序处理并与硬件交互。

5.Java编译环境的配置与各阶段详解

(1).配置环境遍历path:

"计算机"属性---->
"高级系统"中设置---->
环境变量(系统变量作用域全体计算机用户,用户变量仅作用于该用户)---->
点击path---->
修改变量值。

(2).配置环境变量的实质:

将“javac.exe”加入到DOS命令窗口可用范围步骤:
即将java\jdk…\bin配置到path中(用分号间隔前后路径)并重启DOS即可。

(3).查看javac的版本:

命令:javac -version。

(4).编译阶段

①使用命令: javac + java源文件路径
②快捷方法:
将java源文件拖入DOS命令窗口中;
直接在地址栏上输入“cmd”即可。

(5).运行阶段

①运行前提:class生成了;
②使用命令:java + 类名(无后缀);
③特殊的,在高版本的JDK中,可直接java+源文件路径(编译+运行),但不会生成class文件。

6.代码编写基础理论

(1).HelloWorld实例:

public class HelloWorld {
	//(类体)
	public static void main(String[] args){
		//(方法体)
		System.out.println("Hello World");
	}
}

①class表示一个类,“HelloWorld”是一个类名,后面必须存在{},被称为类体;
②main方法是程序的入口,方法必须放在类体中。

(2).public class与class:

①一个java源文件中可定义多个class;
②public的类不是必须的,可以没有;
③只要有一个class定义,必须生成一个"xxx.class文件";
④public的类应与源文件名一致;
⑤public的类只能有一个。

(3).标识符:

定义:

凡是程序员可修改(有权利自主命名)的单词;

作用域:

类名,方法名,变量名,接口名,常量名。

命名规则:

①只能由数字,字母,下划线,$(美元符)组成;
②不能以数字开头;
③关键字(public,class等)无法作标识符;
④严格区分大小写;
⑤理论上无长度限制。

命名规范:

①若不遵守规范,不会报错,但可读性较差;
②见名知意;
③遵循驼峰方式(合理利用大小写);
④类名,接口名首字母大写,后面每个单词首字母大写。

(4).关键字:

定义:

官方定义号的一些由特殊含义的单词;

特征:

必须全部用小写;

(5).变量与字面量(含数据类型):

字面量定义:

在java语言中的数据被称为“字面量”;

字面量种类:

①整数型
②浮点型
③布尔型
④字符型
⑤字符串型

变量定义:

内存中储存数据的基本单位。

数据类型:
基本数据类型:

①整型:byte(一个字节),short(两个字节),int(四个字节),long(八个字节);
②浮点型:float(四个字节),double(八个字节);
③布尔型:boolean(一个字节);
④字符型:char(两个字节);

引用数据类型:

典例:String,自定义类等等;
在java中除了基本数据类型,其他均为引用数据类型。

计算机储存单位:

一个字节等于八个比特位
1byte = 8bit;
1KB = 1024byte;
1MB = 1024KB;
1GB = 1024MB;
1bit即为计算机中二进制中的“0”,“1”;
在二进制中,最左边的数字代表符号:“0”为正,“1”为负;

存储范围:

①byte [-128~127]即2^7;
②short [-32768~32767]即2^15;
③int [-2147483648~2147483647]即2^31;
char [0~65535]即2^16;

数据类型的转换:

①在Java中,整数型变量被默认当作int处理,若需转换成long应在字面量后加L;
②小容量可直接赋值为大容量,称为自动类型转换;
③大容量转小容量可加强制类型转换,可使编译通过,但可能会损失精度;
④当一个整数赋值给char时,会根据ASCII码值自动转换成对应字符;
⑤多种数据类型作混合运算时,最终结果类型为容量最大的类型;
⑥int作除法时会取整,可能会降低精度。
⑦double比float存储值更加准确;
⑧java中规定,浮点数被默认当作double处理,若需用float,则在数字后面加f。
⑨布尔类型仅有true和false俩个值,用于逻辑的判断。

变量三要素:

类型+名字+值(类型决定空间大小)。

变量的声明:

数据类型+变量名;
在java中,变量必须先声明再赋值才能正常运行。

变量的分类:

①成员变量:在方法体外;
②局部变量:在方法体内;
③局部变量仅在方法体中有效,出了方法便会释放内存。

(6).运算符:

算术运算符:

①算术运算符分为+ - * / % ++ --;
②++使变量自加一;
③当++出现在变量后时,会优先做赋值运算,再自加一;
④当++出现在变量前时,会优先自加一,再做赋值运算;

关系运算符:

①关系运算符分为> < = >= <= == !=;
②对关系运算符中,结果只可能输出布尔类型数据;
③“=”是赋值操作,而“==”是关系运算符;

逻辑运算符:

①逻辑运算符包括&(逻辑与) |(逻辑或) ! &&(短路与) ||(短路或);
②逻辑运算符中,结果只可能输出布尔类型数据;
③逻辑和短路运算符输出结果完全相同;
④短路运算符会出现短路现象,即逻辑符号右边表示不执行;
⑤&&(||)效率比&(|)高,一般用&&(||);

赋值运算符:

①赋值运算符包括+= -= *= /= %=;
②x+=20与x=x+20不完全相同
例如:
byte x = 100;x+=20;sout(x)=>120;
byte x = 100;x = x+20;sout(x)=>编译报错,类型不匹配;

三目运算符:

①语法格式:布尔表达式?表达式1:表达式2;
②执行原理:
当布尔表达式为true时,执行表达式1;
当布尔表达式为false时,执行表达式2。

+的作用详解:

①求和作用:对于两边都是数字的情况;
②字符串的拼接:对于两边都是字符串的情况,结果仍是字符串。

(7).选择语句(if,switch):

if语句:

①if语句语法:
if(布尔表达式){
java语句
};
②执行条件:当布尔表达式为true时,执行java语句;
③if…else…执行语法:
if(布尔表达式){
java语句}else{
java语句}

switch语句:

④switch语句(仅支持int类型和String类型)语法:
switch(变量){
case 值1:
java语句
break;
case 值2:
java语句
break;

default:
java语句
}
⑤在switch语句中,务必不要忘记break,否则会发生穿透现象。

(8).循环语句(for,while,do…while):

for语句:

①语法规则:
for(初始化表达式;条件表达式;更新表达式){
循环体;
}
②初始化表达式仅在语句中执行一次;
③条件表达式必须是布尔类型;
④执行顺序:初始化表达式->条件表达式->循环体->更新表达式;

while语句:

①语法规则:
while(布尔表达式){
循环体;}

do…while语句:

①语法规则:
do{
循环体;}while(布尔表达式);
②执行原理:
先执行一次循环体,再判断布尔式。

(9).转向语句:

break语句:

①使用条件:
a.用于switch语句,终止循环的执行;
b.用于循环语句,终止循环的执行;
②运行原理:
break语句会终止离它最近的循环;
③额外用法:
当由多层循环时,可对for做修饰,终止指定的循环:
例如:
a:for(){}
b:for(){}
break a; //终止a的循环

continue语句:

①作用:
终止本次循环,直接进入下一循环;
额外用法与break语句相似;

(10).方法(c语言中的函数):

定义:

一段可以被重复利用的代码片段,可以用来完成某种特定功能;

详解:

①语法格式:
[修饰符列表]+返回值类型+方法名(形式参数列表){方法体}
②修饰符列表为非必选项;
③返回值类型只要是数据类型就行;
④返回值为空时,返回值类型写为void;
⑤方法实现后需要去调用,否则不会执行;
⑥只要有return 关键字执行,方法必须结束;
⑦return后跟的值必须与返回值类型相吻合;
⑧return 语句用于终止当前方法;
⑨方法名要见名知意,且首字母需小写,后面每个单词字母大写;
⑩形参的参数均为局部变量,方法结束后内存释放;
⑪方法体中代码遵循自上而下的顺序执行。

方法的调用:

①语法:
类名.方法名(实际参数列表);
②实参和形参必须一一对应,类型和个数都需一一对应;
③当调用方法和被调用方法在一个类中时,类名可省略。

方法调用与JVM:

①JVM主要有三块内存:栈内存,堆内存,方法区内存;
②方法区中最先有数据,存放代码片段,class字节码文件;
③栈内存:方法调用的时候,方法在所需内存空间中在栈中分配;
④调用方法时叫作“压栈”,执行结束后,内存释放,叫作“弹栈”;
⑤栈中储存调用方法所需内存,以及方法中的局部变量;
⑥栈有先进后出,后进先出的原则。

方法重载:

①定义:功能相似的方法可让其“方法名”相同。
②优点: 代码较为美观且易于代码的编写;
③编译器会优先通过方法名区分方法,当存在多种方法名相同时,编译器通过方法的参数类型进行区分。
④发生条件:在同一个类中,方法名相同,参数列表不同;
⑤方法重载仅与方法名和形参列表有关;
⑥println()是一个典型的方法重载的例子。

方法递归:

①定义:方法调用该方法自己叫作“方法递归”;
②方法递归必须存在结束条件;
③当递归时程序无结束条件,会发生“StackOverflowError”栈内存溢出错误;
④递归使用时耗费内存较大,易报错;

7.面向对象

(1).面向过程与面向对象:

面向过程开发:

①缺点:代码之间耦合度高,扩展性太差;
②优点:对小型项目或功能,面向过程效率较高,快速开发;

面向对象开发:

①优点:更符合人类的思维方式,耦合度低,扩展力强;
②面向对象的三个术语:
OOA:面向对象分析(Object-Oriented Analysis)
OOD:面向对象设计(Object-Oriented Design)
OOP:面向对象编程(Object-Oriented Programming)
③面向对象的三大特征:
封装 继承 多态

(2).类与对象

类与对象基础:

①类:不实际存在,一个抽象的概念;
②对象:实际存在的个体;
③关系:在java中,想要得到对象,必须根据类的模板创造出来(实例化);
类中描述的是对象的共同特征。
④类的组成:
属性+方法;
⑤类的语法:
[修饰符列表] class+类名{类体}
⑥类体中包含属性和方法;
⑦对象的创建和使用语法:
new+类名(); //new是一个运算符,专门负责对象的创建
⑧new过程的详解:
凡是通过“new”创建出来的对象,都存在“堆内存”中;
new的作用是在堆内存中开辟一块空间;

实例变量:
①对象的“实例变量”储存在堆内存中;
②局部变量和方法存储在栈内存中;
③对于成员变量来说,如果未手动赋值,则系统赋默认值。
④保存对象内存地址的变量,叫作“引用”;
⑤对象又被成为“实例”,实例变量是对象级的变量;
⑥一个实例对象仅能对应一个对象;
⑦访问实例变量语法: 引用.实例变量名;

空指针异常:

①“NullPointerException”空引用访问对象的数据时出现;
②空指针异常出现在运行阶段,能正常编译;

(3).构造方法:

作用与特性:

①作用:完成对象的创建并给对象的属性赋值;
②特性:当一个类没有构造方法时,系统会默认给一个无参数构造方法;

构造方法的调用:

[修饰符列表]+构造方法名(形参列表){构造方法体}

构造方法与普通方法:

①构造方法修饰符列表使用public;
②构造方法名必须与类名一致;
③构造方法无需返回值类型;
④构造方法支持方法重载;

(4).封装:

封装的作用:

①保证内部结构的安全;
②屏蔽复杂,暴露简单;
③保证仅开发人员可知;

封装的步骤:

①属性私有化(使用private关键字对变量修饰);
②对外提供简单的入口;

利用set,get为程序设定私有化入口:
①get方法:
public+返回值类型+get属性名(属性名首字母大写)(){return xxx;}
②set方法:
public void set属性名(属性名首字母大写)(一个参数){ xxx = 参数;}
③可在set方法中设立关卡,使修改数据符合实际。

(5).static & this 关键字:

static关键字概述:

①所有static修饰的都是类级别的;
②static修饰的都采用“类名.”的方式访问;
③static所修饰的都是静态的:比如:静态变量,静态方法;
④没有static修饰的都是实例的,需要采用“引用.”的方式来访问;
⑤简而言之,一个对象一份是“实例变量”,所有对象一份是“静态变量”;
⑥当该类型所有对象某一个属性全部相同时,定义成静态变量;
⑦当一个方法中直接访问了实例变量,则该方法一定是实例方法。

成员变量的储存:

①静态变量存在方法区中;
②实例变量存在中;
③局部变量存在中;

静态代码块:

①静态代码块类加载时执行,仅执行一次;
②静态代码块在main方法前执行;
③语法结构:static{…;}
④作用:类加载时执行代码,比如初始化程序,记录日志等功能可用;

实例代码块:

①语法结构:{…;};
②该代码块在实例方法执行前执行;
③可提出实例方法中前面的重复代码放入该代码块中。

this关键字概述:

①一个对象对应一个this;
②this是一个“引用”,保存当前对象的内存地址,指向自身;
③this从实质上来说代表当前对象;
④this存储在堆内存中对象的内部;
⑤this只用于实例方法,谁调用这个方法,this指向谁;
⑥this大部分情况可省略;在构造方法中,this用于区分局部变量与实例变量不可省略;
⑦this可用于构造方法中,通过一个构造方法调另一个构造方法时代码复用,两个构造方法必须在同一类中,用法:this(实际参数列表),该用法仅能用于构造方法的第一行且只能写一行。

(6).继承:

继承的作用:

①子类继承父类,代码得到复用;
②因为有了继承,才有了后面的方法覆盖和多态;

继承的特性:

①B类继承A类,则B类为子类,超类,A类为父类,基类;
②java仅仅允许单继承,不能出现“class C extends A,B”(C++可以);
③尽管只允许单继承,但可间接继承,比如“class C extends B;class B extends A;”;
④java中,不可以继承构造方法,其他的都可以继承,但私有的无法在子类中直接访问;
⑤Java中无显示继承的默认继承“Object”类,“Object”是所有类的父类。

(7).super关键字:

super和this的对比:

①二者都可出现在实例方法和构造方法中;
②语法结构:
this: "this.“或者"this()”;
super:"super.“或者"super()”;
③二者大部分情况都可以省略;
④this()和super()的用法对比:
this():仅出现在构造方法第一行,通过构造方法去调用“本类”中的其他构造方法,实现代码复用;
super():仅出现在构造方法第一行,通过当前构造方法调用"父类"中的构造方法,目的是:创建子类对象时,先初始化父类型的特征。

super()的概述:

①作用:通过子类的构造方法调用父类的构造方法;
②当构造方法中既没this(),有没有super()时,默认有一个super(),表示通过当前子类调用父类的构造方法,所以必须保证父类的无参构造是存在的;
③this()和super()不能共存,因为其二者都只能出现在构造方法第一行;
④无论如何,父类的构造方法一定会执行。

super.的概述:

①super.大部分情况可省略,当父类和子类中有同名属性或方法时,想通过子类访问父类属性或方法时,不可省略super.;

总结super关键字:

①super.属性名;
//访问父类的属性;
②super.方法名(实参);
//访问父类的方法;
③super(实参);
//调用父类的构造方法;

(8).方法覆盖(方法重写)与多态(toString()方法):

方法覆盖的作用:

子类继承父类时,继承过来的方法已无法满足客户的需求,子类有权对其进行重写以满足业务需求。

方法覆盖的使用条件:

①两个类必须有继承关系;
②重写前后方法具有相同的形参列表,返回值类型,方法名;
③访问权限不能更低,只能更高;
④重写之后的方法不能比之前方法抛出更多的异常;
⑤私有方法和构造方法无法被覆盖;
⑥仅针对于“实例方法”;

关于Object类中的toString方法简介:

①作用:将java对象转换成字符串形式,输出对象的内存地址;
②特点:直接调用对象时,默认调出对象的toString()方法;

向上转型与向下转型:

①前提条件:java中无论向上转型还是向下转型,两种类型必须存在继承关系;
②向上转型定义:父类型引用指向子类型对象(自动类型转换)
例子:Object obj = new Students();
③向下转型定义:子类型引用指向父类型对象(强制类型转换)
例子:Students s = (Students)new Object();
④向下转型语法:子类 变量 = (子类)父类对象;

多态:

①含义:父类型引用指向子类型对象;
②实质:
在编译阶段,绑定父类的方法;
在运行阶段,动态绑定子类对象的方向。

ClassCastException与instanceof运算符:

①类型转换异常:ClassCastException;
②instanceof运算符:
a.instanceof可在运行阶段动态判断引用指向的对象类型;
b.语法格式:引用 instanceof 类型;
c.得到的结果是布尔类型,如果是true,代表引用指向的堆内存中的java对象是该类型;
d.使用该运算符可用很好地避免CCE异常;
③用法实例:

if(a instanceof Cat){
		Cat c = (Cat)	a;
		c.catchMouse();	
}

在开发中的作用:降低程序的耦合度,提高程序的扩展力。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值