精通Java学习之路(二)
—抽象类与接口—
->抽象类的抽象概念:父类知道子类一定要干嘛,但是每个子类完成的都不一样,子类以后也只会用重写的功能,那么父类的该功能就可以定义为抽象方法,子类重写调用子类自己
->父类中的所有抽象方法在子类中必须被全部重写,或者把这个子类也写成抽象类。
抽象类存在的意义就是当母猪生孩子,就是拿来被继承的
->接口interface,是更加彻底的抽象,用于规范思想,子类必须实现接口的全部抽象方法
->实现接口的类称为实现类
接口中所有的抽象方法也是全部要重写
->接口也可以继承接口
接口中没有构造器,不能创建对象
类有5大成分:成员变量,方法,构造器,代码块,内部类
静态代码块优先会与类执行一次,可用于初始化操作,实例代码块用于执行实例对象,可用于初始化实例资源。
–final-
final(最终):修饰类,表示该类不能被继承了,实际开发中没怎么用
final修饰方法,该方法不能被重写
final修饰变量,变量有且只能赋值一次
final静态变量也可以用 静态代码块赋值:

单例设计模式:一个类永远只存在一个对象,就像虚拟机,任务管理器,有些只能开一个窗口的游戏。
饿汉单例设计模式:通过类获取单例对象的时候,对象就已经提前做好了
—xml文件—
xml(可扩展标记语言)文件用于数据交换,数据传输;配置文件;数据存储;
xml文件元素: 声明(抬头):<?xml version=”1.0″ encoding=”UTF-8″ ?>
元素(标签)(一个XML文件只能有一个根标签,就是最大的那个),属性,注释,实体字符,CDATA字符数据区,处理指令。元素(标签)(一个XML文件只能有一个根标签,就是最大的那个),属性(id=?,desc=?),注释(),实体字符(转义字符),CDATA字符数据区,处理指令(就是css)。
xml中的转义字符:
<为<>为> “为"’为'&为&
html是用来显示数据的;xml是用来描述数据、存放数据的,xml不是HTML的替代品,xml和html是两种不同用途的语言。 XML 不是要替换 HTML;实际上XML 可以视作对 HTML 的补充。XML 和HTML 的目标不同HTML 的设计目标是显示数据并集中于数据外观,而XML的设计目标是描述数据并集中于数据的内容,XML是一种跨平台的,与软、硬件无关的,处理与传输信息的工具。
这边建议直接上代码,里面有注释好了解看些,复制到自己的IDE去看吧
抽象类学习代码:
public class chouxiang {
static abstract class Animal{
public abstract void run();//抽象方法
public abstract void eat();
}//父类定义为抽象的
static abstract class Dog extends Animal{
@Override
public void run(){
System.out.println("狗跑步");
}
}
static class Cat extends Animal{
@Override//必须重写抽象类的全部方法,不然这个类也要被写成抽象类
public void run(){
System.out.println("猫跑步");
}
@Override
public void eat(){
System.out.println("猫吃饭");
}
}public static void main(String[] args) {
Cat cat =new Cat();
cat.eat();
cat.run();
//抽象类不能创建对象,但是一定有构造器
/**
反证法证明:如果能创建:Animal an =new Animal();
an.run();这时这个方法就跑不了,因为没有定义
或者直接说:抽象类本来就是抽象,抽象就不能具体化;
*/
//抽象类优点可以得到拥有抽象方法的能力
}
}
接口学习代码:
接口类:
public interface jiekou {
public abstract void run();//标灰是因为接口中的抽象方法默认就是public abstract,所以可以省略不写前面的
void eat();
public static final String name = "sb";//常量,运行过程中不许更改
//接口中常量可以省去public static final
class cl1{
public void hit(){
System.out.println("父类打");
}
}
interface inter{
default void hit(){
System.out.println("接口打");
}
}
class cl2 extends cl1 implements inter{//继承在前接口在后,继承为亲爹,接口为干爹
public static void main(String[] args) {
cl2 cc =new cl2();
cc.hit();//运行出来是父类的方法
}
}
}
实现类:
interface jiekou2{
void go();
}
interface jiekou3 extends jiekou4,jiekou5{//接口继承接口,目的也是省空间
void set();
}
interface jiekou4{
void get();
}
interface jiekou5{
void abab();
}
public class shixianlei implements jiekou,jiekou2,jiekou3{
private String name;
private int age;
public shixianlei(String name,int age){
this.name=name;
this.age=age;
}
@Override
public void run() {
System.out.println(name+"跑");
}
//@Override//也可以不写Override,这只是用于检查的
public void eat() {
}
@Override
public void go() {
}
@Override
public void set() {
}
@Override
public void get() {
}
@Override
public void abab() {
}
}
xml学习的代码:
<?xml version="1.0" encoding="UTF-8" ?><!--声明(抬头)-->
<?xml-stylesheet type="text/css" href="./xml.css" ?><!--导入CSS样式-->
<!--元素(标签)-->
<person>
<name>何平安</name>
<age>19</age>
<sex>boy</sex>
<box>
<start></start>
</box>
<Sql>
select *from student where id < 123 && age > 18
</Sql>
</person>
代码块学习时候的代码:
public class daimakuai {
private final String name;
static {
System.out.println("静态代码块,先执行一次");
}
{
System.out.println("实例代码块执行一次");
name="何平安";
}
public static void main(String[] args) {
System.out.println("主方法执行一次");
daimakuai d1=new daimakuai();//执行实例代码块
System.out.println(d1.name);
buy(12);
}
final double r=3.14;
public static final double s;
static {
s=123;
}//静态代码块赋值
//r=23;//final变量被第二次赋值,报错
public static void buy(final double w){
//w=15;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?