Java部分概念理解
第1部分 方法
1.1 方法基本概念
1) 方法:用于封装一段特定功能代码,尽可能一个方法至只实现一个基本功能,相当于C语言中的函数;
2) 方法可以多次调用;
3) 避免代码冗余,便于维护,便于团队合作;
4) 定义方法五要素:修饰词、返回值类型(也可没有void)、方法名、参数(有参数更灵活)、方法体
public static int sum (int a,int b) { }
修饰词 返回值类型 方法名 参数 方法体
5)方法可以嵌套调用
1.2 方法的重写
需要改父类才重写
.1.2.1
1)发生在父子类中,方法名相同,参数表相同,方法体不同
2)重写方法被调用时,看对象类型;子类重写会覆盖父类方法名和参数列表相同的方法,当然用super还是可以调用父类方法
1.2.2、 注意事项:
1) 两大:方法名和参数相同
2)两小:
2.1)子类的返回值类型小于或等于父类的
2.1.1)void和基本类型时,必须相同 ;
2.1.2)引用类型时小于或等于;java认为父类大,子类小
2.2)子类抛出的异常小于或等于父类的
3)一大:子类方法的访问权限要大于或等于父类
1.3 补充:
重写和重载的区别:
1)重写:一个类中,方法名相同,参数列表相同,方法体不同;遵循“运行期”绑定,根据对象调用方法
2)重载:一个类中,方法名相同,参数列表不同,方法体不同;遵循“编译期”绑定,根据引用类型绑定方法
第2部分 类和对象
对象:真实存在的单个个体 如 张三、李四、王五 , 门口停的宝马;
类:类别/类别,一类个体 如 人,车;
Java类中可以包含所有对象都包含的属性、行为
类是一种数据类型
只能包含:
1)描述对象所共有的特征:------变量
属性-----静的
2)对象所共有的行为:----------方法
行为-----动的
一个类可以创建多个对象
类是对象的模板,对象是类的实例
第3部分 重载
重载就跟付款一样,根据付款方式不同即参数不同,调用不同方法(标签一致的)。
System.out.println(Sting a){};
System.out.println(int b){};
1、在同一个类中,方法名相同, 参数不同
2、编译器在编译时自动根据方法 的签名绑定调用方法
第4部分 构造方法
1、给成员变量赋初值
2、与类同名,没有返回值,也不用写void
3、再创建(new)对象时自动调用
4、若自己不写编译器会有默认无参构造,自己写了不再提供
5、构造可以重载,所以可以自己写有参和无参构造
第5部分 this
this:指代当前对象,哪个调用指的就是哪个对象
方法中访问成员变量之前默认都有个this
this 的用法
1) this.成员变量---------------访问成员变量
2) this.方法名()------------访问方法,后期基本用不到
3) this()----------------------调用构造方法,多个构造,构造建相互嵌套调用
补充:
方法里是局部变量
类里方法外是成员变量
引用类型里面装的是地址,根据地址找指向的对象
第6部分 内存管理
6.1堆:
1.1)存储使用new关键字创建的对象(包括成员变量)
1.2) 成员变量生命周期:创建对象存在堆中,对象呗GC回收就结束了
1.3)GC(垃圾回收器)不定时到堆中查看,看到垃圾(没有任何引用所指向的对象)自动回收,回收过程是透明的,并不一定看到垃圾就回收,可以调用System.gc()建议快一点回收
1.4)内存泄漏:不再使用的对象还没有被及时回收(有指向但你不用,可能会导致奔溃),当对象不再使用时应及时将引用设置为null。
6.2 栈:
2.1)用于存储正在调用方法中的所有局部变量(包含参数)
2.2)调用方法时在栈中为该方法分配一块对应的栈帧,栈帧中包含所有的局部变量(包括参数),方法调用结束时,栈帧消失,局部变量一并消失
2.3)局部变量周期:调用方法时存在,方法调用结束时与栈帧一并消失
成员变量:类中,方法外;有默认值
局部变量:方法中,没有默认值
6.3 方法区
3.1) 用于存储.class字节码文件(包括方法)
3.2) 方法只存储一次(多次调用方法用this区分),通过this区分具体是那个引用
第7部分 继承
7.1 继承 和泛化一个意思
程序中继承:代码不用自己写,也能用
1)目的:避免代码重复,有利于代码复用
2)通过extends实现继承
3)父类:放所有子类所共有的属性和行为
子类:放特有的属性和行为
4.)子类继承父类后,子类具有:子类+父类,
5)一个父类可以有多个子类,
一个子类只有一个父类
单一继承
6)继承具有传递性
7)java规定:构造子类之前必须先构造父类方法;子类中如没自己调,则默认调用父类无参构造方法
7.2 super
super()调用父类方法必须位于子类构造的第一句
super:指向当前对象的父类对象,和this类似
1)super.成员变量名-------------------------------访问父类的成员变量
2)super.方法名()------------------------------调用父类的方法
3)super()-----------------------------------------调用父类的构造方法
7.3 向上造型
1) 父类型的引用指向子类型的对象
2) 能点出来什么,看引用的类型
Animal o1 = new animal();
Tiger o2 = new Tiger();
Animal o3 = new Tiger(); //一个老虎对象是动物类型 ,向上造型
Tiger o4 = new Animal(); //错误
class Animal{
}
class Tiger extends Animal{
}
父类可以提供一个公共类型接口,跟接口可以联系起来。
第8部分 package、import、访问控制修饰符、static和final
8.1 package
1)避免类的命名冲突
2)包名有层次结构
建议:域名反写.项目名称.模块名称.类名
cn.tedu.manager.stumanager.Student
3) 建议:包名所有字母都小写
4) 类的完全限定名:包名.类名
8.2 import
1) 作用:声明类/引入类
2) 同包中的类可以直接访问
不同包中的类:用import.包名.类名
import.java.util.Scanner;
Scanner s = new Scanner(System.in);
int age = s.nextInt();
s.close;
8.3 访问控制修饰符
数据私有化(private),行为公开化(public)
1)public:公开的,任何类
2)private:私有的,本类
3)protected:受保护的,本类、子类、同包类
4)默认的:什么也不写,本类、同包类
类的访问修饰:public和默认的
类成员的访问修饰:如上4种都可以
protected和private可以修饰内部类
java建议所有都加访问权限
8.4 static:静态的
8.4.1 静态变量
1.1)成员变量:
1.1.1)实例变量:1)属于对象的,存在堆中;
2)有几个对象就有几个实例变量;
3)必须通过 对象名.变量名 访问
1.1.2)静态变量:1)用static修饰,属于类的,只有一个,存在方法区中;
2)常常建议通过 类名.变量名 访问;不建议用引用来访问
3)何时使用:所有对象的数据都一样的时候使用,如做班级系统中学生的班级,银行系统中的利率
8.4.2 静态方法
1)用static修饰,属于类的,只有一个,存在方法区中;
2)常常建议通过 类名.变量名 访问;不建议用引用来访问
3) 没有隐式this传递,在静态方法中不能直接访问实例成员,静态方法中只能直接访问静态的
class Aoo{
int a;
static int b;
void show(){ //实例方法
a++;
b++; //Aoo.b++;
}
static void test(){ //静态方法中只能直接访问静态的
a++; //编译错误 ,没有this,在静态方法中不能直接访问实例成员
b++;
}
}
8.4.3 静态块:略
8.5 final
第9部分 抽象
抽象 不完整
1)抽象方法:由abstract修饰,只有方法的定义,没有方法体即不需要“{}”
2)抽象类:由abstract修饰,可以包含抽象方法,也可以包含普通方法
3)包含抽象方法的类,必须是抽象类;类中没有抽象方法,也可以将类声明为抽象类
4)抽象类不能被实例化 Shape s = new Shape();//错误
5)抽象类一般需要被继承:
5.1)子类也声明为抽象类
5.2)子类重写抽象类中所有抽象方法---首选
6)抽象类的意义:
6.1)封装子类公用的成员,为子类提供一个公共的类型
6.2)定义抽象方法,由子类来做不同的实现,但入口(方法名)是一样的
第10部分 接口
//接口声明
[可见度] interface 接口名称 [extends 其他的接口名名] {
// 声明变量
// 抽象方法
} //实例
/* 文件名 : Animal.java */
interface Animal {
public void eat();
public void run();
} /*接口实现:Implements关键字放在class声明后面。*/ //实例
/* 文件名 : Dog.java */
public class Dog implements Animal{ public void eat(){
System.out.println("Dog eats");
} public void run(){
System.out.println("Dog run");
} public int noOfLegs(){
return 0;
} public static void main(String args[]){
Dog m = new Dog();
m.eat();
m.run();
}
}
只要遵守了USB规范,就能将设备插入到电脑上
只要遵守了国家盖楼房的标准,这个楼就能卖
只要遵守了这个规范,就能干某件事
1.接口就是一个标准、一个规范
2.接口中只能包含常量和抽象方法
3.接口不能被实例化
接口 引用 = new 实现类(); //向上造型
4.类实现接口,必须将所有抽象方法都实现
5.类可以实现多个接口,用逗号分隔
若类又继承父类又实现接口,需先继承后实现
6.接口与接口之间可以继承
Java部分概念理解的更多相关文章
- JAVA的概念理解:JavaSE、JavaEE、JavaME、jdk、jre、ide
JavaSE是Java Standard Edtion的缩写,译成中文就是Java标准版,也是Java的核心.无论是 JavaEE(Java企业版)还是JavaME(Java微型版)都是以JavaSE ...
- 加深理解Java异常概念并熟记5个最常见的运行时异常
加深理解Java异常概念并熟记5个最常见的运行时异常 说明Error与Exception的联系和区别有哪些? 列举最常见的5个运用时异常. 1.Error和Exception的联系和区别: Error ...
- Java基础之理解Annotation(与@有关,即是注释)
Java基础之理解Annotation 一.概念 Annontation是Java5开始引入的新特征.中文名称一般叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata) ...
- Java 集合深入理解(4):List<E> 接口
点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 蓝瘦!香菇! 连着加班几天,醉了.学学 List 放松下! 在 Java 集合深入理解:Collection 中我们熟悉了 ...
- 大数据核心知识点:Hbase、Spark、Hive、MapReduce概念理解,特点及机制
今天,上海尚学堂大数据培训班毕业的一位学生去参加易普软件公司面试,应聘的职位是大数据开发.面试官问了他10个问题,主要集中在Hbase.Spark.Hive和MapReduce上,基础概念.特点.应用 ...
- Java多线程概念简介 多线程中篇(一)
Java的线程与操作系统的线程 在线程的相关介绍中,有讲到“线程的实现”分为三种:内核支持,用户级以及两者混合.(这只是一种简要的分类) Java线程在JDK1.2之前,是用户线程实现的 而在JD ...
- SpringIOC的概念理解、构造器注入、setter注入、p命名空间注入、IOC容器介绍与比较
1.IOC概念理解 IOC(Inversion of Control)即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象 ...
- Java六大必须理解的问题
Java六大必须理解的问题 对于这个系列里的问题,每个学Java的人都应该搞懂.当然,如果只是学Java玩玩就无所谓了.如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列.内容 ...
- java提高篇-----理解java的三大特性之封装
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
随机推荐
- 如何解决代码中if…else 过多的问题
前言 if...else 是所有高级编程语言都有的必备功能.但现实中的代码往往存在着过多的 if...else.虽然 if...else 是必须的,但滥用 if...else 会对代码的可读性.可维护 ...
- python之sqlalchemy的使用
准备数据 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column from sqla ...
- Maven pom.xml中的元素modules、parent、properties以及import
前言 项目中用到了maven,而且用到的内容不像利用maven/eclipse搭建ssm(spring+spring mvc+mybatis)用的那么简单:maven的核心是pom.xml,那么我就它 ...
- TortoiseGit之配置密钥
TortoiseGit 使用扩展名为ppk的密钥,而不是ssh-keygen生成的rsa密钥.使用命令ssh-keygen -C "邮箱地址" -t rsa产生的密钥在Tortoi ...
- 18 python 初学(time、random 模块)
# _author: lily # _date: 2019/1/13 import time import datetime print(help(time)) # print(time.time() ...
- 学号 20175329 2018-2019-3《Java程序设计》第八周学习总结
学号 20175329 2018-2019-3<Java程序设计>第八周学习总结 教材学习内容总结 第十五章 泛型 可以使用"class 名称"声明一个类,为了和普通的 ...
- 解决 Intellij IDEA Cannot Resolve Symbol ‘XXX’ 问题
1.java类报错 https://blog.csdn.net/qq_32040767/article/details/77096680 2.类对应的依赖没有加载进来.编译器自身的设置和缓存问题类. ...
- Raft与MongoDB复制集协议比较
在一文搞懂raft算法一文中,从raft论文出发,详细介绍了raft的工作流程以及对特殊情况的处理.但算法.协议这种偏抽象的东西,仅仅看论文还是比较难以掌握的,需要看看在工业界的具体实现.本文关注Mo ...
- Nginx(三)------nginx 反向代理
Nginx 服务器的反向代理服务是其最常用的重要功能,由反向代理服务也可以衍生出很多与此相关的 Nginx 服务器重要功能,比如后面会介绍的负载均衡.本篇博客我们会先介绍 Nginx 的反向代理,当然 ...
- iOS开发基础篇-Button基础
一.简单介绍 UIButton 的功能:响应用户操作.显示文字.显示图片.调整内部图片和文字的位置. 二. UIButton 的状态 UIControlStateNormal :普通状态,为默认情 ...