j2se学习中的一些零碎知识点2

1、static修饰的变量叫做“静态变量”(静态变量,被存储在方法区中,所有的java对象共享静态变量,所有静态变量是类级别的,使用“类名.”的方式访问。),static修饰的方法叫做“静态方法”(静态方法中不能够直直接访问非静态数据。工具类中的方法大部分都是静态方法。 ),static还可以定义静态语句块。(静态语句块的语法为:static{java语句},静态语句块在类中可以有一个,也可以有多个。静态语句块在类加载的阶段执行,并且执行一次。并且(如果有多个静态语句块)是自上而下依次执行。)

-  实例语句块在每次调用构造方法之前执行,且(如果有多个实例语句块)是自上而下依次执行。语法:{java语句}。

-  静态的方法按照正规的方式“类名.”访问,静态的方法也能够使用“引用.”访问。(编译阶段会检查出引用的类型,编译通过,运行的时候,仍然使用“类名.”的方式去访问,静态方法执行不需要对象。)

-  成员变量在创建对象的时候初始化,静态变量在类加载阶段赋值,并且只赋值一次。

-  什么是设计模式:设计模式是可以重复利用的解决方案,从结构上可以分为三类:创建型、结构型和行为型。最简单的设计模式是单例设计模式:为了保证JVM中某一个类型的java对象永远只有一个,节省内存的开销。实现懒汉式单例设计模式的简单方式:将构造方法私有化,并对外提供一个公开获取这个类的对象的方法(该方法为静态方法,采用(类名.)的方式调用。),以及在类中提供一个这个类类型的静态变量。(懒汉式用到对象的时候才会创建。)(==两边如果是基本数据类型,可以比较这两个基本数据类型是否相等,==两边如果是引用数据类型,则比较的是内存地址。)

-  饿汉式单例设计模式:在类加载时已经创建单例对象。

2、引用类继承最基本的作用是代码重用。语法:[修饰符] class 子类名 extends 父类名。

-  java语言中,类和类之间只支持单继承。一个类如果没有显示的继承其他类,则该类默认继承Object。Object是SUN提供的java中的根类。(继承是面向对象的重要概念,软件中的继承和现实中的继承概念是一样的)

-  java语言中子类继承父类,会将父类中所有数据全部继承(构造方法无法被子类继承),包括私有的也能够继承过来,但是在子类中无法直接访问父类中的私有的数据,但是可以间接访问。(通过setter和getter方法访问和修改私有数据)

-  方法的覆盖或者说是方法的重写:(override或者overwrite)如果父类中的方法无法满足当前子类中的业务需求,需要将父类中的方法进行重新写一遍。(如果子类重写父类中的方法之后,子类对象一定调用的是子类重写的方法)。

-  发生方法覆盖的条件:1、发生在具有继承关系的两个类之间;2、具有相同的方法名、相同的返回值类型、相同的参数列表;3、重写的方法不能比被重写的方法拥有更低的访问权限;4、重写的方法不能比被重写的方法抛出更宽泛的异常;5、私有的方法不能被覆盖;6、构造方法无法被覆盖,因为构造方法无法被继承;7、静态的方法不存在覆盖;8、覆盖指的是成员方法,和成员变量无关。(继承最基本的作用是代码重用,最重要的作用是方法可以重写。)

3、java语言中向上转型(upcasting,子类转父类)和向下转型(downcasting,父类转子类),无论是向上转型还是向下转型,两个类之间必须要有继承关系。

-  向上转型又称为自动类型转换,父类型的引用指向子类型的对象(如Animal a = new Cat();),程序分为编译阶段和运行阶段两个阶段,编译阶段只知道a是一个Animal类型,而程序在运行的时候堆中实际对象是Cat类型。(a.eat();)程序在编译阶段a被编译器看作是Animal类型,所以程序在编译阶段a因哟i功能绑定的是Animal类中的eat方法(静态绑定);而程序在运行的时候堆中的实际对象是Cat类型,而Cat已经重写了eat方法,所以程序在运行阶段对象绑定的方法是Cat中的eat()方法。(动态绑定)

-  向下转型又称之为强制类型转换。(需要注意,Animal a = new Dog();Cat c = (Cat)a;编译阶段能够通过,但是程序在运行期可能会出错,会报java.lang.ClassCastException异常,所以在做强制类型转换的时候是存在风险的。)

-  为了避免ClassCastException的发生,java引入了instanceof。用法:instanceof运算符结果是boolean类型。(Cat a = new Cat();if(a instanceof Cat){Cat c = (Cat)a};如果结果是true,a引用指向堆中的java对象是Cat类型。)

-  多态的作用:项目的耦合度降低,项目的扩展能力增强。(尽量不要面向具体编程,面向父类型进行编程,面向抽象编程)

4、super不是引用类型,super中存储的不是内存地址,super指向的不是父类对象,而是代表当前子类对象中的父类型特征。

-  什么时候使用super?父类和子类中都有某个数据或者相同的方法,如果要在子类中访问父类中的属性或者方法,需要使用(super.)的方式。

-  super可以使用在什么地方?super可以在成员方法中;(super和this相同,都不能直接用在静态上下文中)

-  super关键字用在构造方法中,语法为:super(实参);,通过子类的构造方法去调用父类的构造方法,作用是给当前子类对象中的父类型特征赋值。(如果一个构造方法第一行如果没有this(...);也没有显式地调用super(...);系统会默认调用super();)。super(...);的调用只能够放在构造方法的第一行中,和this(...);一样,所以this(...);和super(...);不能共存。

-  需要注意的是,super(...)调用了父类的构造方法,但是并不会创建父类对象。(构造方法执行不一定创建对象)

-   在java语言中,只要是创建了java对象,那么Object中的无参数构造方法一定会执行。

-   父类的构造方法并不会被子类继承,但是可以被子类调用。(单例模式的类型无法被继承,即单例模式的类型没有子类。原因是单例模式构造方法私有化,子类的构造方法无法使用super();调用父类的私有构造方法。)

5、final修饰的类无法被继承,final修饰的方法无法被覆盖,final修饰的局部变量一旦赋值,不可再改变,final修饰的成员变量必须“显式的”初始化。class A{final int i;}编译无法通过。(要么final修饰的成员变量手动初始化,要么在构造方法调用结束之前赋值也行。如class A{final int i = 1200}或者class A{final int = k; A(){k = 1200;}} )(一般情况下,final修饰的成员变量一般和static连用,称之为常量。)

-  常量为值不可改变的变量,要求所有的常量大写。

6、如何定义抽象类:class关键字前加上abstract。(抽象类无法被实例化,即抽象类无法创建对象。)

-  虽然抽象类没有办法实例化,但是抽象类也有构造方法,该构造方法是给子类创建对象使用的。

-  抽象类中可以定义抽象方法,抽象方法的语法为:在方法的修饰符列表中添加abstract关键字,并且抽象方法应该以“;”结束,不带“{}”。(例如:public abstract void m();)

-  抽象类中不一定有抽象方法,但是抽象方法必须出现在抽象类中。

-  一个非抽象类继承一个抽象类,必须将抽象类中的抽象方法覆盖。

-  抽象类不能被final修饰;抽象方法不能被final修饰。(显示为非法的修饰符组合)

-  final修饰的引用类型,该引用不可再重新指向其他的java对象,但是final修饰的引用,该引用指向

的对象的属性是可以修改的。

7、接口也是一种引用类型,可以等同看作类。

-  如何定义接口,语法为:[修饰符] interface 接口名{}(需要注意的是,接口中只能够出现常量和抽象方法)

-  接口其实是一种特殊的抽象类,特殊在于接口是完全抽象的。

-  接口中也没有构造方法,是无法被实例化的。

-  接口和接口之间可以进行多继承。

-  一个类可以实现多个接口。(一个类实现一个接口,需要使用implements关键字,implements和extends意义相同,这里的实现可以等同看作继承。),一个非抽象的类实现接口,需要将接口中的所有的方法“实现”。(或者说是重写)

-  在接口中常量用public static final修饰,public static final可以省略。接口中所有的抽象方法都是public abstract,public abstract可以省略。

-  接口的作用:1、可以使项目分层,所有层都面向接口开发,开发效率提高;2、接口使代码和代码之间的耦合度降低,就像内存条和主板的关系,变得“可插拔”,可以随意地切换。

-  接口和抽象类都能完成某个功能,优先选择接口。(因为接口可以多实现,多继承,并且一个类除了实现接口之外,还可以去继承其他类,保留了类的继承。)

时间: 2024-11-06 09:59:58

j2se学习中的一些零碎知识点2的相关文章

j2se学习中的一些零碎知识点1(内容有些零散)

1.java编译和运行阶段发生的事情,如下图所示: -  编写的java源文件,通过java编译器编译生成以.class结尾的字节码文件(字节码并不是二进制),生成的字节码文件通过类装载器装载进java虚拟机中,再通过java虚拟机运行转化成二进制文件与底层的操作系统交互,实现在硬件平台上运行.(java的可移植性) 2.在安装数据库(如oracle和mysql)或者jdk软件开发工具包等软件时,安装路径上尽量避免不要有空格或者是中文. 3.windows操作系统中在命令行窗口中执行命令ipco

java学习中,接口的使用(重要,常用知识点)(java 学习中的小记录)

java学习中,接口的使用(重要,常用知识点)(java 学习中的小记录)作者:王可利(Star·星星) 接口(功能:用来添加拓展功能的) 例子:铅笔.带橡皮檫的铅笔. 两个功能:     1.写字......> 铅笔     2.擦字......> 橡皮擦 想法:定义一个铅笔类,定义一个橡皮擦类,定义一个带橡皮擦的铅笔类继承 铅笔类和橡皮擦类 但是java是单继承的.于是就有了解决的方法:接口(可以添加拓展功能) 如:一个铅笔类,给它添加一个接口给它一个拓展类(橡皮擦类) 接口的定义模式 用

整理c#学习中的知识点

首先作为一个小白,在短时间内学会C#是有一定难度的,我就最近学习的内容,梳理了一下知识点,日后回过头来多看看多想想,我想这对自己的学习帮助很大,知识点如下: 1.转义符 在代码中书写一个斜杠(\),用于改变斜杠后出现字符的意义. 例:" 代表字符串的开始或者结束: \"代表普通的双引号字符 常见的转义符有:\"代表双引号:\'代表单引号:\n代表换行符:\t代表制表符:\\代表斜杠 2.逻辑运算符 是用于判断条件是否成立的运算符,用真(true)和假(false)表示判断结果

点滴的积累---J2SE学习小结

点滴的积累---J2SE学习小结 什么是J2SE J2SE就是Java2的标准版,主要用于桌面应用软件的编程:包括那些构成Java语言核心的类.比方:数据库连接.接口定义.输入/输出.网络编程. 学习感受 近半个月的坎坷,总算是将马士兵的<J2SE教程>视频看完了,期间一些其它的事一些不得不处理的事总是打断我的安排.看了视频之后认为东西确实都非常基础给我印象最深的是关于程序执行的内存分析.IO和线程,这谁在之前不管是学习VB.VB.NET还是C#中都没怎么设计到的东西. 首先,我想对于一个初学

JAVA零碎知识点

总结的JAVA零碎知识点 学习和工作中总会有一些零碎的知识点,可能不经常用到或者以前不熟知,在此记录一下. 一.有关Lamda表达式 Lamda表达式是1.8新增特性,所以使用前请确定项目JDK版本是否支持. Lamda主要解决匿名内部类和函数的啰嗦语句问题,比如曾经的Jframe的Jbutton监听事件addActionListener JButton jb = new JButton("click"); jb.addActionListener(new ActionListener

J2EE学习笔记02 Server.xml知识点及Servlet初步

内容概要: 1.继续讲解server.xml中的一些设置知识点 2设置外部WEBAPP及使用根目录开发 3.重头戏Servlet及相关知识 关键词: TomCat,web.xml,connectionTimeout="20000" ,appBase = "webapps",线程池配置,servlet版的HelloWorld 详细内容: 一.继续讲解server.xml中的一些设置知识点 接下来,我们还是看我们的TomCat. 我们上节课呢,我们开发了myweb,我们

java学习中,异常和错误的简介、捕获异常、抛出异常、自定义异常(java 学习中的小记录)

java学习中,异常和错误的简介.捕获异常.抛出异常.自定义异常(java 学习中的小记录)作者:王可利(Star·星星) 异常:(API 的 java.lang 有一个异常,有很多很多) 在Java程序中也会程序出现不正常的情况,这个就叫异常.     Java是面向对象的语言,任何事物都可以用类来描述,同样的异常也是一种事物.Java中提供了很多的异常类.     多个异常堆积起来,就是一个异常体系.   Throwable:是异常类的父类,超类.Exception 异常.error错误.

个人学习 php 语言的相关知识点目录

本文用于记录个人学习php语言的相关知识点整理,给各位打算了解php知识的童鞋提供参考: 除了最基本的html.css.js知识,以下知识是一个php开发必备的知识点,也是web开发中常用的知识点. 以下是进阶阶段需要掌握的相关知识: xml编程 smarty模板技术 常用php框架技术,thinkphp(容易理解)等. ajax jquery linux环境下的开发 版本控制:svn和git 缓存技术:redis.memcached.页面技术等 Mysql等服务器软件:数据库设计.sql语句优

深度学习中的Data Augmentation方法(转)基于keras

在深度学习中,当数据量不够大时候,常常采用下面4中方法: 1. 人工增加训练集的大小. 通过平移, 翻转, 加噪声等方法从已有数据中创造出一批"新"的数据.也就是Data Augmentation 2. Regularization. 数据量比较小会导致模型过拟合, 使得训练误差很小而测试误差特别大. 通过在Loss Function 后面加上正则项可以抑制过拟合的产生. 缺点是引入了一个需要手动调整的hyper-parameter. 详见 https://www.wikiwand.c