网站seo问题诊断工具,三合一网站建设平台,网站快照是自己做的吗,新乡做网站多少钱1. static关键字 静态区的特点#xff1a;静态区里面的每一样东西都是唯一有且仅有一个的#xff0c;如此时str1 abc即此时静态区里面已经创建了字符串abc并将abc地址赋给str1#xff0c;后面在进行赋值也不会在静态区开辟一串新的abc 1.1 static修…1. static关键字 静态区的特点静态区里面的每一样东西都是唯一有且仅有一个的如此时str1 abc即此时静态区里面已经创建了字符串abc并将abc地址赋给str1后面在进行赋值也不会在静态区开辟一串新的abc 1.1 static修饰成员 区分 一个类的成员有static修饰的成员存储在静态区statci修饰的成员一旦被赋值那么所有通过这个类创建的对象都会有这个成员的值一旦修改是该类的所有对象的这个成员被修改 栗子idea中int类型的变量未赋值会默认赋0double默认0.0存储地址的变量默认赋空null static修饰的成员变量叫静态变量通常用类名来赋值如Student(类名).Teacher(被static修饰的成员变量) 1.2 static修饰方法 静态static修饰方法和非静态方法之间存在一些关键的区别主要表现在以下几个方面 加载和执行时间静态方法随着类的加载而加载属于类方法而非静态方法属于类的实例对象。因此静态方法在类加载阶段就已加载到内存中而非静态方法只有在创建类的实例对象时才会加载。这意味着静态方法在类加载阶段就已执行而非静态方法则是在对象实例化后执行。访问权限静态方法只能访问静态变量不能直接访问非静态变量。而非静态方法可以访问静态和非静态变量。调用方式静态方法可以通过类名直接调用不需要创建类的实例对象。而非静态方法必须通过类的实例对象才能调用。内部实现在内部实现上静态方法只能调用其他静态方法和静态变量不能使用非静态方法和非静态变量。而非静态方法可以调用静态和非静态方法以及非静态变量。代码块静态代码块在类加载时主动执行普通代码块在实例化时主动执行。静态代码块与静态方法的区别在于静态代码块只能主动执行一次而静态方法可以被多次调用。 总的来说使用static修饰的方法属于类本身而非static修饰的方法属于类的实例对象。因此静态方法具有更早的加载和执行时间更严格的访问权限和调用方式以及特定的内部实现和执行流程。这些区别使得静态方法和非静态方法在设计和使用上有着不同的考虑和应用场景。 2. 继承
2.1 继承的特点 继承把其他已经定义好的类的东西搬到要新定义的类中称之为继承被继承的类称为父类继承的类称为子类继承之后子类可以调用父类的东西Java只支持单继承不支持多继承但支持多层继承 1. 单继承理解每个类只能继承一个类大白话理解一个儿子只有一个亲爸 2. 不支持多继承定义的新类c即继承类a又继承类bJava中是不允许的大白话理解c类有两个亲爸这在Java是不允许发生的 3. 多层继承c类继承d类b类继承c类a类继承b类这是允许的因为c继承dc此时是个新的单独的一个类只是有d的一些特征此时符合单继承再接着b类继承c类b此时也是个新的单独的类但是c有d的特征而b又继承c故b有c和d的特征这称之为多层继承并没有违反单继承的规则b的继承又可以理解为直接继承于c间接继承于dJava所有类都直接或简接的继承于Object类即Object类是所有类的祖宗 2.2 继承的好处 将共性的东西抽取出来定义为一个类后面定义其他类时可直接继承进行调用无需再重复写代码减少代码冗余提高开发效率 2.3 eg 2.4 extends关键字 extends是继承时需要用到的关键字 书写格式 public class 继承者的类名 extends 被继承者的类名 { 代码...} 2.5 子类可以继承父类哪些内容 非私有(public、proteted关键字修饰和私有private修饰的构造方法都不能被继承 原因类名是唯一的即类不能重复定义而构造方法和类名是保持一致的故子类若继承了父类的构造方法就不符合构造方法和类名保持一致的语法规则 非私有(public、proteted关键字修饰和私有private修饰的成员都能被继承 原因每个标准的JavaBean都会有输入输出方法而每个对象成员变量可以通过输入 输出方法进行输入输出故成员可以继承下来进行使用非私有(public、proteted关键字修饰的成员能被继承私有private修饰的成员方法不能被继承 原因被private关键字修饰的方法只能在本类中使用故无法继承到别的类中去 面向对象的一些概念不重复赘述我另一篇学术垃圾里面有欢迎进来刨垃圾嘿嘿
mhttp://t.csdnimg.cn/PVl1g
2.6 super、this关键字和就近原则
2.6.1 继承中成员变量的访问特点 没有任何关键字修饰的变量会先从局部变量开始寻找访问若有则直接访问若没有则从本类中成员变量 寻找若还是没有则从父类的成员变量中寻找访问还是没有就会报错遵循就近原则离谁近先用谁this关键字修饰的直接跳过局部变量的搜寻直接从本类的成员变量中开始搜寻super关键字修饰的直接跳到父类的成员变量中搜寻 eg 2.6.2 继承中成员方法的访问特点
和上面成员变量一样 直接调用满足离谁近先用谁this关键字修饰从本类中成员变量开始寻找没有就访问父类super修饰直接访问父类的成员 2.7 方法的重写 在继承体系中子类和父类出现一摸一样的方法定义时叫做方法的重写 一般父类的方法不满足子类的需求时会进行方法重写方法重写前加上Override注释进行验证重写方法是否有语法错误 该注释不同于普通的注释该注释还是写给虚拟机看的 重写的本质 加载进虚方法表的条件 不能被static关键字修饰被static关键字修饰的方法只在static修饰的方法中调用权限不够大不能被继承下来 不能被private关键字修饰被private修饰的方法只能在本类中使用权限不够大 方法的访问是先从本类中查找在查找虚方法表的故有super修饰就直接从虚表中查询即直接访问父类的方法 注意 重写的方法必须和父类方法名、形参列表保持一致重写的方法访问权限必须大于或等于父类重写的方法返回值类型必须小于或等于父类只有加载进虚方法表中的方法才能被重写 2.8 继承中的构造方法 子类无法继承父类的构造方法子类所有构造方法都默认先访问父类的无参构造方法再执行自己若要访问父类的有参构造方法得自己写 书写格式 在子类的构造方法中添加super(调用带参数构造方法就写参数进括号不带可忽略)若不写super()虚拟机会默认调用父类无参的构造方法
super()必须写在构造方法里的最前面即有效代码的第一行 3. 多态
3.1 多态特点 多态一个对象多种形态 好处一个方法可以让多个不同形态的对象调用提高代码复用性减少代码冗余提高开发效率 3.2 栗子
后面即使在添加子类也可以直接调用该方法而不是每添加一个新子类又重写一次 3.3 多态创建对象格式
父类类名 对象名 new 子类类名 通过以上栗子不难发现多态的使用是有前提的 要有继承关系 要有重写的方法比如上面栗子登录进管理系统后学生、教师都要查询信息但是信 息的具体信息是不同的教师可能还有管理课程竞赛等内容那么所用到的方法也是 不同的所以子类要对应的重写父类的方法 父类引用指向子类的对象 3.4 多态调用成员的特点 3.5 父类类型的对象调用子类的方法
接着上面栗子只需要将cat强制类型转换即可 通过这么一转换即可从子类的表中即上图堆区new出来的新空间的右表中开始查询数据所以可以调用子类的所有方法和成员 注意转换不能瞎转new出来的那块空间是什么类型的就只能转该空间的类型即上面new出来的空间是Cat类的此时对对象cat转换也只能转成Cat类的因为转成其他类和上面的空间所记载的数据不同无法调用也运行不起来会报错 3.6 instanceof关键字
Java提供了instanceof关键字进行自动转换即所转的对象满足条件就会进行转换
if里面那串代码意思如果对象animal是 Cat类型的就会创建一个新的对象c类型为Cat 4. final关键字、权限修饰符、代码块
4.1 final关键字 final关键字修饰类则类不能被继承final关键字修饰方法则方法不能被重写final修饰变量则变量具有常量属性不能被修改 修饰数值型的变量如final int a 10; 则此时a不能被修改可以把a看成10若强行修改a 20即 10 20这合理么不合理语法也会报错修饰地址型的变量如final (类名) a new 类名()此时a所存的地址不能不修改即此时已经固定指向某一块空间了不能在赋其他空间地址给a但是a所指的空间里面的内容可以修改 4.2 权限修饰符 private修饰的成员或方法只能在本类中使用没有修饰符即默认的修饰成员或方法只能在本包中使用protected修饰的成员或方法不仅可以在本包中使用还可以在其他包的子类中使用public通用 4.3 代码块
static修饰的代码块当程序运行时会执行一次可以利用该特性对某些类的数据进行初始化 5. 抽象类 抽象类的作用可以统一开发时方法的格式方便开发人员调用方法。 比如抽象类中定义了一个方法 public void work(); 如果有个类继承了这个抽象类那么子类要么按照上面的方法格式进行重写方法要么该子类也定义成抽象类不然会报错。抽象类不能实例化不能创建对象 abstract关键字 抽象一个类或者方法时用到的一个关键字 6. 接口 接口可以理解为一种规则规定如何定义一个方法的格式好处也是方法格式统一方便开发人员进行调用 6.1 接口的成分 接口可以有成员变量但Java会默认用public static final关键字修饰即此时的成员变量是个定值不能被修改接口可以有方法即此时定义一个方法的格式后面调用该接口的类都得按照该方法格式进行定义方法默认用public abstract关键字修饰 接口不能含有构造方法接口不能实例化 6.2 接口的关系 接口和接口有单继承或者多继承的关系 类和接口可以有单实现和多实现的关系即一个类可以有多个接口若类实现多个接口那么该类要重写接口里面定义的的所有方法若类实现的接口有父类那么接口的父类里面的方法一样要重写 7. 内部类
7.1 成员内部类 成员内部类也是成员只是封装成类 应用场景电脑有很多信息将电脑封装成类那么当介绍到电脑里面的CPU、显卡等等时这些零部件也有很多信息也可以单独的封装成一个类此时成员内部类的场景就适用了因为CPU和显卡封装的类是依附于电脑这个类的所以可以在电脑这个类里面进行定义 创建内部类对象
方式1
public class Test8 {Computer.Cpu cc new Computer().new Cpu();//成员内部类是成员//要调用一个类里面的成员如果该成员不是静态的无法通过类名直接调用需要创建对象才可以调用//所以我们要先new电脑这个类出来然后调用里面的成员再看成员Cpu也是个类//同样要调用一个类的成员还是要先创建对象所以要在new一次即此时在堆区开辟了两块空间//分别存储Computer类和Cpu类//每new一次空间都会返回一个地址所以cc最终记录第二次new的地址
}public class Computer {String computerName;String computerBrand;public class Cpu {String cpuName;String cpuBrand;}
}方式2
外部类定定义个方法返回内部类的地址即可
public Cpu getCpu() {return new Cpu();}
成员内部类也是个类所以用不同权限修饰符修饰有什么区别和前面一样不过多赘述 7.2 静态内部类 静态内部类就是一种特殊的成员内部类不过是用关键字static修饰定义了静态内部类后可以直接用类名调用该成员 此时没有开辟两次空间只在堆区上单独开辟一块Cpu类的空间 Computer.Cpu cc new Computer.Cpu(); 7.3 匿名内部成员类 不用写类名适用场景当一个类不需要重复调用可以定义匿名内部成员类简化代码 定义格式
new 类名或者接口名() {}; 栗子
public abstract class Animal {public abstract void eat();public void drink() {System.out.println(喝);}
}public static void main(String[] args) {Animal a new Animal() {Overridepublic void eat() {System.out.println(吃);}};a.eat();a.drink();}