学习笔记之Java篇(0725)

news2024/11/16 17:40:04

p this

  • 普通方法中,this总是指向调用该方法的对象。

  • 构造方法中,this总是指向正要初始化的对象。
    请添加图片描述

  • this()调用必须重载的构造方法,避免相同地址初始化代码,但只能在构造方法中用,比企鹅必须位于构造方法的第一句。

  • this不能用于static方法中。

  • this是作为普通方法的“隐式参数”,由系统传入到方法中。

public class TestThis {
  int a,b,c;
  TestThis(){
    System.out.println("正要初始化对象:"+this);
  }
  TestThis(int a,int b){
    this(); //调用无参的构造方法,并且必须位于第一行!
    a = a; //这里都是指的局部变量而不是成员变量

//    为了区分成员变量和局部变量,这种情况占了this使用情况大多数!
    this.a = a;
    this.b = b;
    System.out.println("两个参数");

  }
  TestThis(int a,int b,int c){
    this(a,b); // 调用带参构造方法,并且必须位于第一行!!
    this.c = c;
    System.out.println("三个参数");
  }
  void sing(){
    System.out.println("我想唱歌...");
  }
  void eat(){
    System.out.println("当前对象:"+this);
    this.sing(); //调用本类中的sing(),也可以写成 sing() ,省略 this.
    System.out.println("你妈妈喊你回家吃饭!");
  }
  public static void main(String[] args) {
  TestThis hi = new TestThis(2,3);
  hi.eat();
  }
}

请添加图片描述

p static关键字

  • 静态变量(类变量)、静态方法(类方法):static声明的属性或方法。
  • 静态变量/静态方法生命周期和类相同,在整个程序执行期间都有小。它有如下特点:
    1. 为该类的公用变量,属于类,被该类的所有实例共享,在类载入时被初始化。
    2. static 变量只有一份。
    3. 一般用*“类名.类变量/方法”*来调用。
    4. 在static 方法中不可直接访问非static的成员。

请添加图片描述

package Object;

public class IndexStatic {
  int id;
  String name; //账户名

  static String company = "北京尚学堂";//公司名称
  public IndexStatic(int id,String name){
    this.id = id;
    this.name = name;
  }

  public void login(){
    System.out.println(name);
  }

  public static void printCompany(){
    //this.login(); //调用非静态成员,编译会报错
    System.out.println(company);
  }

  public static void main(String[] args) {
  IndexStatic u = new IndexStatic(101,"高崎");
  IndexStatic.printCompany();
  IndexStatic.company = "北京阿里爷爷";
  IndexStatic.printCompany();
  }
}

静态初始化块

  • 构造方法用于对象的普通属性初始化。

  • 静态初始化块,用于类的初始化操作,初始化静态属性。

  • 在静态初始化块中,不能直接访问非static成员。

  • 注意事项

    • 静态初始化块执行顺序:
      • 上溯到Object类,先执行Object的静态初始化块,再向下执行子类的静态初始化块,直到类的静态初始化块为止。
      • 构造方法执行顺序和上面一样!

p 变量的分类和作用域

请添加图片描述

p 包机制(package、import)

  • 包(package)相当于文件夹对于文件的作用。用于管理类、用于解决类的重名问题。

package

两个要点:

  1. 通常是类的第一句非注释性语句。
  2. 包名:域名倒着写即可,再加上模块名,便于内部管理类。

package的命名演示

com.oracle.test;
com.itbaizhan.gao.test;
com.itbaizhan.gao.view;
com.itbaizhan.view.model;

注意事项

  • 写项目时都要加包,不要使用默认包。
  • com.gaocom.gao.car,这是两个完全独立的包,只是逻辑上看起来后者是前者的一部分。

JDK中的主要包

Java中的常用包说明
java.lang包含一些Java 语言的核心类,如 String、Math、Integer、System 和 Thread。
java.awt包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。
java.net包含执行与网络相关的操作的类。
java.io包含能提供多种输入/输出功能的类。
Java.util包含一些实用工具类,如定义系统特性。使用与日期日历相关的函数。

p 导入类 import

如果要使用其他包的类,需要使用import,从而在本类中直接通过类名来调用,否则就需要书写类的完整包名和类名。

注意要点

  • Java会默认导入java.lang包下所有的类,因此这些类我们可以直接使用。
  • 如果导入两个同名的类,只能用包名+类名来显示调用相关类:
  • java.util.Date date = new java.util.Date();

导入同名类的处理

import java.sql.Date;
import java.util.*;//导入该包下所有的类。会降低编译速度,但不会降低运行速度。
public class Test{
    public static void main(String[ ] args)
    {
        //这里指的是java.sql.Date
        Date now;
        //java.util.Date因为和java.sql.Date类同名,需要完整路径
        java.util.Date now2 = new java.util.Date();
        System.out.println(now2);
        //java.util包的非同名类不需要完整路径
        Scanner input = new Scanner(System.in);
    }
}

静态导入

静态导入(static import):其作用是用于导入指定类的静态属性和静态方法,这样就可以直接使用静态属性和静态方法了。

import static java.lang.Math.*;//导入Math类的所有静态属性 
import static java.lang.Math.PI;//导入Math类的PI属性

public class IndexImport {
  public static void main(String[] args) {
    int a = (int) (PI*2);
    System.out.println(a);
    System.out.println(PI);
    System.out.println(random()*100.0);
  }
}

p 面向对象三大特征

1、继承

继承两个主要作用

  1. 代码复用,更加容易实现类的扩展。
  2. 方便建模。

*instanceof运算符

  • instanceof是二元运算符,左边是对象,右边是类;当对象时右面类或子类所创建的对象时,返回true;否则返回false
public class Person {
  String name;
  int height;
  public void rest(){
    System.out.println("休息!");
  }


  public static void main(String[] args) {
  Stu stu = new Stu("msyy",187,"java");
  stu.rest();
  stu.study();
  System.out.println(stu.name+stu.height+stu.major);
//测试继承
    System.out.println(stu instanceof Stu);
    System.out.println(stu instanceof Person);

  }
}

class Stu  extends Person{
//  专业
  String major;
  public void study(){
    System.out.println("学习!");
  }
  Stu( String name, int height, String major){
    this.name = name;
    this.height = height;
    this.major = major;
  }
}

请添加图片描述
继承使用要点

  1. 父类也称做超类、基类。子类:派生类。
  2. Java中只有单继承,没有像C++那样的多继承。多继承会引起混乱,使得继承过于复杂,系统难于维护。
  3. Java中类没有多继承,接口有多继承。
  4. 子类继承父类,可以得到父类的全部属性和方法(除了父类的构造方法),但不见得可以直接访问(比如,父类私有属性和方法)
  5. 如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object.

方法重写(Override)

  • 子类重写父类的方法,可以用自身行文替换父类行为。重写是实现多态 的必要条件。
  • 方法重写需要符合下面的三个要点
    1. “==”:方法名、形参列表相同。
    2. “<=”:返回值类型和声明异常类型,子类小于等于父类。
    3. “>=”:访问权限,子类大于等于父类。

请添加图片描述

final

final关键字的作用:

  • 修饰变量:被修饰的变量不可改变,一旦赋了初值,就不能被重新赋值。final int MAX_SPEED = 120;
  • 修饰方法:该方法不可被子类重写,但是可以被重载!final void study(){}
  • 修饰类:修饰的类不能被继承。比如:Math、String等。final class A{}

继承和组合

结婚就是组合。两人组合后,可以复用对方的属性和方法!

除了继承,“组合”也能实现代码的复用!“组合”核心是“将父类对象作为子类的属性"。

package Object;

public class Person {
  String name;
  int height;
  public void rest(){
    System.out.println("休息!");
  }


  public static void main(String[] args) {
  Stu stu = new Stu("msyy",187,"java");
  stu.rest();
  stu.study();
  System.out.println(stu.name+stu.height+stu.major);
//测试继承
    System.out.println(stu instanceof Stu);
    System.out.println(stu instanceof Person);

  }
}

class Stu  extends Person{
  Person p = new Person();
//  专业
  String major;
  public void study(){
    System.out.println("学习!");
  }
  Stu( String name, int height, String major){
    this.p.name = name;
    this.p.height = height;
    this.major = major;
  }
  
  
}

组合比较灵活。继承只能有一个父类,但是组合可以有多个属性>所以,有人声称“组合优于继承,开发中可以不用继承”,但是,不建议大家走极端。

对于"is -a" 关系建议使用继承"has-a" 关系建议使用组合。比如:上面的例子,Studentis aPerson 这个逻辑没问题,但是:Student has a Person就有问题了。这时候,显然继承关系比较合适。再比如:笔记本和芯片的关系显然是"has-a”关系,使用组合更好。

请添加图片描述

Object类基本特性

所有类都是Object类的子类,也都具备Object类的所有特性。

  1. Object类是所有类的父类,所有的Java对象都拥有Object类的属性和方法。
  2. 如果在类的声明中未使用extends,则默认继承Object类。

请添加图片描述
IDEA 快捷键和相关操作:

  1. 类的结构视图:alt + 7

  2. 看类的源码:ctrl + 左键

  3. 自动生成构造器、get、set方法/equals等:alt + insert

  4. 查看错误:alt + enter

  5. 快捷输出常见字符串:

    1. main:``public static void main(String[] args)`
    2. sout:System.out.println()
    3. soutm:System.out.println(“描述:所在类中的,所在方法”);

== 和equals()方法

“ =="代表比较双方是否相同。如果是基本类型则表示值相等,如果是引用类型则表示地址相等即是同一个对象。

equals()提供定义“对象内容相等”的逻辑。比如,我们在公安系统中认为id相同的人就是同一个人、学籍系统中认为学号相同的人就是同一个人。

equals(默认是比较两个对象的hashcode。但,可以根据自己的要求重写equals 方法。

package Object;
class  Person1{
  String name;
  int age;
  int id;
  public  Person1(int id,String name,int age){
    this.id=id;
    this.name=name;
    this.age=age;
  }
}
public class Test {
  public static void main(String[] args) {
 
    Person1 p2 = new Person1(101,"ms",23);
    Person1 p3  = new Person1(101,"yy",34);
    System.out.println("p2: "+p2);
    System.out.println("p3: "+p3);
    System.out.println(p2.equals(p3));
  }
}

请添加图片描述


public class Test {
 String name;
 int age;
 int id;
 public  Test(int id,String name,int age){
   this.id=id;
   this.name=name;
   this.age=age;
 }
 public static void main(String[] args) { 
   Test p2 = new Test(101,"ms",23);
   Test p3  = new Test(101,"ms",23);
   System.out.println("p2: "+p2);
   System.out.println("p3: "+p3);
   System.out.println(p2.equals(p3));
 }

 @Override
 public boolean equals(Object obj) {
  if(this == obj) return true;
  if(obj == null ||getClass() != obj.getClass() )return false;
  Test that = (Test) obj;
  return id == that.id && Objects.equals(name,that.name) && Objects.equals(age,that.age);

 }
}

请添加图片描述
super关键字

  1. super“可以看做”直接父类对象的引用。可通过super来访问父类中被子类覆盖的方法或属性。
  2. 使用super调用普通方法,语句没有位置限制,可以在子类中随便调用。
  3. 在一个类中,若是构造方法的第一行没有调用super()或者this(),那么Java默认都会调用super(),含义是调用父类的无参构造方法。
package Object;

public class TestSuper02 {
  public static void main(String[] args) {
    System.out.println("开始创建一个ChildClass2对象。。。。");
    new ChildClass2();
  }

}

class FatherClass2{
  public FatherClass2(){
//    自动加上,所以先创建父类(Object)对象
    super();
    System.out.println("创建FatherClass2");
  }
  static {
    System.out.println("静态初始化:FatherClass2");
  }
}

class ChildClass2 extends FatherClass2 {
  public ChildClass2(){
//    自动加上,所以先创建父类(FatherClass2)对象
    super();
    System.out.println("创建ChildClass2");
  }
  static {
    System.out.println("静态初始化ChildClass2");
  }
}

请添加图片描述
请添加图片描述
继承树追溯
请添加图片描述

  • 属性/方法查找顺序:(比如查找变量h)

    • 查找当前类中有没有属性h
    • 依次上溯到每个父类,查找每个父类中是否有h,直到Object
    • 如果没找到,则出现编译错误
    • 上面步骤,只要找到h变量,则这个过程终止
  • 构造方法调用顺序:

    构造方法第一句总是super()来调用父类对应的构造方法,所以流程就是:先向上追溯到Object,然后再依次向下执行类的初始化和构造方法,直到当前子类为止。

    注意:静态初始化块调用顺序,与构造方法调用顺序一样,不再重复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1949787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

相关性模型-正态分布均值假设检验★★★

该博客为个人学习清风建模的学习笔记&#xff0c;部分课程可以在B站&#xff1a;【强烈推荐】清风&#xff1a;数学建模算法、编程和写作培训的视频课程以及Matlab等软件教学_哔哩哔哩_bilibili 目录 1双侧检验 2单侧检验 3t检验 4两个正态总体均值差的检验 5逐对比较法 …

Origin制作线性拟合回归图

选中数据&#xff0c;点下方散点图 调整散点颜色 在分析中打开线性拟合回归 添加文本 显示上轴

四、单线程多路IO复用+多线程业务工作池

文章目录 一、前言1 编译方法 二、单线程多路IO复用多线程业务工作池结构三、重写Client_Context类四、编写Server类 一、前言 我们以及讲完单线程多路IO复用 以及任务调度与执行的C线程池&#xff0c;接下来我们就给他结合起来。 由于项目变大&#xff0c;尝试解耦项目&#…

基于opencv的答题卡识别

文章目录 一、背景需求二、处理步骤图片预处理检测到答题卡轮廓透视变换找每个圆圈的轮廓轮廓排序判断是否答题正确 一、背景需求 传统的手动评分方法耗时且容易出错&#xff0c;自动化评分可以可以显著提高评分过程的速度和准确性、减少人工成本。 答题卡图片处理效果如下&am…

使用法国云手机进行面向法国的社媒营销

在当今数字化和全球化的时代&#xff0c;社交媒体已经成为企业营销和拓展市场的重要工具。对于想进入法国市场的企业来说&#xff0c;如何在海外社媒营销中脱颖而出、抓住更多的市场份额&#xff0c;成为了一个关键问题。法国云手机正为企业提供全新的营销工具&#xff0c;助力…

观测云产品更新 | 异常追踪、场景图表、快照、监控等

观测云更新 异常追踪 1、新增【分析看板】&#xff1a;可视化展示不同指标数据。 2、新增【日程】管理和【通知策略】&#xff1a;对 Issue 的内容范围做进一步通知分配。 场景 1、图表&#xff1a;新增【时间偏移】设置。启用时间偏移后&#xff0c;当查询相对时间区间时&a…

项目架构知识点总结

项目架构知识点总结 【一】重要注解【1】SpringBootApplication&#xff08;1&#xff09;⭐️ComponentScan 注解&#xff08;2&#xff09;⭐️EnableAutoConfiguration 注解&#xff08;3&#xff09;⭐️SpringBootConfiguration 注解&#xff08;4&#xff09;Inherited 注…

昇思25天学习打卡营第01天|昇思MindSpore大模型基础j介绍

昇思MindSpore和华为昇思MindSpore大模型学习打卡系列文章&#xff0c;本文仅供参考~ 文章目录 前言一、昇思MindSpore是什么&#xff1f;二、执行流程三、设计理念四、层次结构五、Huawei昇腾AI全栈 前言 随着计算机大模型的不断发展&#xff0c;Ai这门技术也越来越重要&#…

常见CSS属性(二)——浮动

一、浮动简述 浏览器在解析html文档时&#xff0c;正常的顺序是从上往下、从左往右解析。这个正常的解析过程&#xff0c;叫做正常文档流(标准文档流)&#xff0c;而浮动就是使得元素脱离文档流&#xff0c;“浮”在浏览器上。 浮动会使元素脱离文档流&#xff0c;不占位置&…

在 MinIO 使用 SVE 将 ARM 带入人工智能数据基础设施领域

MinIO 性能如此之高的原因之一是&#xff0c;我们做了其他人不会或不能做的细粒度工作。从 SIMD 加速到 AVX-512 优化&#xff0c;我们已经完成了艰巨的任务。ARM CPU 架构的最新发展&#xff0c;特别是可扩展矢量扩展 &#xff08;SVE&#xff09;&#xff0c;为我们提供了比前…

网页秒表小工具

网页秒表小工具 效果展示 HTML代码 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>简洁秒表</title><style>body {font-family: Arial, sans-serif;display: flex;justify-content:…

现货白银交易中spring形态的应用

在现货白银市场中交易想取得成功并从市场中获利&#xff0c;掌握一些工具是必不可少的&#xff0c;而今天我们要介绍的现货白银的交易工具就是spring形态。 对于spring这个英文&#xff0c;我们都很熟悉&#xff0c;它有春天的意思&#xff0c;但这里所说的spring形态并不是指春…

重塑生态体系 深挖应用场景 萤石诠释AI时代智慧生活新图景

7月24日&#xff0c;“智动新生&#xff0c;尽在掌控”2024萤石夏季新品发布会在杭州举办。来自全国各地的萤石合作伙伴、行业从业者及相关媒体&#xff0c;共聚杭州&#xff0c;共同见证拥抱AI的萤石&#xff0c;将如何全新升级&#xff0c;AI加持下的智慧生活又有何不同。 发…

架构设计面试经验总结

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 学习架构设计知识的思路总结为以下几点&#xff1a; 想要学习架构…

Python + PyQt 搭建可视化页面(PyCharm)

Python PyQt 搭建可视化页面&#xff08;PyCharm&#xff09; 配置PyQt5环境 1.1 安装PyQt5和PyQt5-tools pip install PyQt5pip install PyQt5-tools1.2 QtDesigner和PyUIC环境的配置 配置QTDesigner&#xff0c;用来打开QT可视化开发工具 在PyCharm中依次打开&#xff1a…

经典文献阅读之--World Models for Autonomous Driving(自动驾驶的世界模型:综述)

Tip: 如果你在进行深度学习、自动驾驶、模型推理、微调或AI绘画出图等任务&#xff0c;并且需要GPU资源&#xff0c;可以考虑使用UCloud云计算旗下的Compshare的GPU算力云平台。他们提供高性价比的4090 GPU&#xff0c;按时收费每卡2.6元&#xff0c;月卡只需要1.7元每小时&…

2024-07-24 Linux C語言使用inotify进行文件变化检测

一、在Linux中&#xff0c;用C语言检测文件内容变化的方法有几种&#xff0c;最常用的包括以下几种&#xff1a; 轮询&#xff08;Polling&#xff09;&#xff1a;周期性地读取文件并检查内容是否变化。inotify&#xff1a;使用Linux内核提供的inotify接口&#xff0c;这是一…

【AIGC】构建自己的谷歌搜索引擎服务并使用

一、谷歌 谷歌的搜索引擎需要自己创建服务才能启用检索api。&#xff08;需自行翻墙和创建自己的谷歌账号&#xff09; 1.1 API服务创建 1&#xff09;登陆https://console.cloud.google.com/: 2&#xff09; 选择新建项目&#xff0c;取号项目名即可&#xff08;比如:Olin…

scrapy爬取城市天气数据

scrapy爬取城市天气数据 一、创建scrapy项目二、修改settings,设置UA,开启管道三、编写爬虫文件四、编写items.py五、在weather.py中导入WeatherSpiderItem类六、管道中存入数据,保存至csv文件七、完整代码一、创建scrapy项目 先来看一下爬取的字段情况: 本次爬取城市天…

谷粒商城实战笔记-60-商品服务-API-品牌管理-效果优化与快速显示开关

文章目录 一&#xff0c;显示状态列改为switch开关二&#xff0c;监听状态改变 首先&#xff0c;把ESLint语法检查关掉&#xff0c;因为这个语法检查过于严格&#xff0c;在控制台输出很多错误信息&#xff0c;干扰开发。 在build目录下下webpack.base.conf.js中&#xff0c;把…