当前位置: 首页 > news >正文

3.31学习总结

(本次学习总结,总结了目前学习java遇到的一些关键字和零碎知识点)

一.static关键字

static可以用来修饰类的成员方法、类的成员变量、类中的内部类(以及用static修饰的内部类中的变量、方法、内部类),另外可以编写static代码块来优化程序性能。

1.static修饰类的成员变量

static修饰的成员变量称为静态变量或类变量:

静态变量和非静态变量的区别:

静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。static成员变量的初始化顺序按照定义的顺序进行初始化。

2.static修饰的成员方法

static修饰的成员方法称为静态方法:在静态方法中不能访问类的非静态成员方法和非静态成员变量。但是在非静态方法中可以访问静态成员方法和静态成员变量。

public class Student {//静态变量public static String name="张三";private static String sex="男";//非静态变量public int age=21;//静态方法public static void show1(){System.out.println(name);System.out.println(sex);System.out.println(age);}//非静态方法public void show2(){System.out.println(name);System.out.println(sex);System.out.println(age);}
}

(可以看到这里我们无法在静态方法中调用非静态成员变量,这里会报错)

3.static修饰代码块

static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次并且静态修饰的代码块最先执行.

public class Daimakuai {private String name;private int age;//构造代码块://1.写在成员位置的代码块//2.作用:可以把多个构造方法中重复的代码抽取出来//3.执行时机:我们在创建本类对象的时候会先执行代码块中的构造方法{System.out.println("这里是构造代码块!");}//静态代码块://随着类的对象创建而加载,同时只运行一次static{System.out.println("这里是静态代码块!");}//空参的构造函数public Daimakuai() {}//带参的构造函数public Daimakuai(String name, int age) {this.name = name;this.age = age;}//get,set方法public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

从结果我们可以看到,静态的代码块最先得到执行.

4.static修饰内部类

public class Car extends AbsCar {//静态内部类中可以用static继续修饰内部类static class A {static class B {static int num0 = 10;}}//静态内部类Cstatic class C {int num1 = 10;}//普通内部类Dclass D{int num2 =10;}public static void main(String[] args) {int num = A.B.num0;C c = new C();int a = c.num1;}}

二.this关键词

this 关键字是 Java 常用的关键字,可用于任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用。

1.this.属性名

大部分时候,普通方法访问其他方法、成员变量时无须使用 this 前缀,但如果方法里有个局部变量和成员变量同名,但程序又需要在该方法里访问这个被覆盖的成员变量,则必须使用 this 前缀。

当一个类的属性(成员变量)名与访问该属性的方法参数名相同时,则需要使用 this 关键字来访问类中的属性,以区分类的属性和方法中的参数

public class Person {private String name;private String sex;private int age;//空参构造public Person() {}//带参构造//在构造方法中使用了 this 关键字对属性 name、sex 和 age 赋值,this 表示当前对象。public Person(String name, String sex, int age) {this.name = name;this.sex = sex;this.age = age;}
}

2.this.方法名

this 关键字最大的作用就是让类中一个方法,访问该类里的另一个方法或实例变量。

大部分时候,一个方法访问该类中定义的其他方法、成员变量时加不加 this 前缀的效果是完全一样的。

public void da() {// 使用this引用调用da()方法的对象this.jump();System.out.println("正在执行da方法");
}

注意:对于 static 修饰的方法而言,可以使用类来直接调用该方法,如果在 static 修饰的方法中使用 this 关键字,则这个关键字就无法指向合适的对象。所以,static 修饰的方法中不能使用 this 引用。并且 Java 语法规定,静态成员不能直接访问非静态成员。

3.this( )访问构造方法

可以使用在构造方法当中,通过当前的构造方法调用其他的构造方法,括号中可以有参数,如果有参数就是调用指定的有参构造方法。

注意:this( ) 不能在普通方法中使用,只能写在构造方法中。在构造方法中使用时,必须是第一条语句。

public class Person {String name;// 无参构造方法(没有参数的构造方法)public Student() {this("李四");}// 有参构造方法public Student(String name) {this.name = name;}// 输出name和agepublic void print() {System.out.println("姓名:" + name);}
}

三.final关键字

final 是 Java 中的一个关键字,可以用于修饰类、方法和变量。当一个类被声明为 final 时,它意味着该类不能被继承。当一个方法被声明为 final 时,它意味着该方法不能被重写。当一个变量被声明为 final 时,它意味着该变量的值不能被修改

1.final修饰类

如果声明一个类为final类,  那么这个类就是最终类,不能被继承,一个类如果是final的,那么其中所有的成员方法都无法进行覆盖重写

public final class Parent {public void happy() {System.out.println("父母");}
}//如果要求继承他则会报错
public class Child extends ParentClass{}

2.final修饰方法

当final用来修饰一个方法的时候,这个方法就是最终方法,那么很明显就是说不能被覆盖重写。

使用final方法的作用:第一个作用是把方法锁定,以防任何继承类修改它的含义;第二个作用是提高效率。

public class ParentClass {public void happy() {System.out.println("高兴");}//用final关键字修饰的方法//final修饰的方法,是一个最终方法,不能被子类去覆盖重写protected final void play(){System.out.println("开心的玩耍");}}

3.final修饰变量

当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。

final成员变量表示常量,只能被赋值一次,赋值后值不再改变。

class Animal {private final int count = 0;public Animal() {//只能赋值一次,会报错count = 1; final Object object = new Object();object = new Object(); //报错}
}

注意:final修饰一个成员变量(属性),必须要显示初始化。这里有两种初始化方式,一种是在变量声明的时候初始化;第二种方法是在声明变量的时候不赋初值,但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值。

http://www.lryc.cn/news/329743.html

相关文章:

  • Android Studio控制台输出中文乱码问题
  • itextPdf生成pdf简单示例
  • 【Linux系列】tree和find命令
  • AI预测福彩3D第23弹【2024年4月1日预测--第4套算法重新开始计算第9次测试】
  • Java常见限流用法介绍和实现
  • 算法——图论:判断二分图(染色问题)
  • 三步提升IEDA下载速度——修改IDEA中镜像地址
  • CentOS7 RPM升级支持BBR TCP/CC的内核版本
  • 文本向量模型BGE与BGE-M3
  • 【黑马头条】-day04自媒体文章审核-阿里云接口-敏感词分析DFA-图像识别OCR-异步调用MQ
  • 新能源充电桩站场AI视频智能分析烟火检测方案及技术特点分析
  • springboot集成logback-spring.xml文件
  • centos7 安装 nginx
  • 29. UE5 RPG应用GamplayAbility
  • http和https的区别!
  • 使用AOP实现打印日志
  • 2024年新算法-冠豪猪优化算法(CPO),CPO-RF-Adaboost,CPO优化随机森林RF-Adaboost回归预测-附代码
  • 浅谈高阶智能驾驶-NOA领航辅助的技术与发展
  • 大模型 智能体 智能玩具 智能音箱 构建教程 wukong-robot
  • Clickhouse-表引擎探索之MergeTree
  • 网络电视盒子哪个好?小编分享电视盒子品牌排行榜
  • 开源模型应用落地-baichuan2模型小试-入门篇(三)
  • 景联文科技高质量大模型训练数据汇总!
  • 【python】正则表达式
  • 学习vue3第十二节(组件的使用与类型)
  • flume配置文件后不能跟注释!!
  • 【docker】Dockerfile自定义镜像
  • webpack项目打包console git分支、打包时间等信息 exec
  • Linux centos7离线搭建FTP
  • 关于GPT-SoVITS语音合成的效果展示(西游之西天送葬团)