学习笔记之Java篇(0725)

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.DateDate 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));}@Overridepublic 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://xiahunao.cn/news/3266704.html

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

相关文章

【Linux】进程IO|重定向|缓冲区|dup2|dup|用户级缓冲区|模拟缓冲区

目录 前言 重定向 实验一 为什么log.txt文件的文件描述符是1 为什么向stdout打印的信息也出现在文件中 实验二 用户级缓冲区 为什么要有用户级缓冲区 系统调用 dup 为什么close(fd1)之后还能向log.txt写入数据&#xff1f; dup2 缓冲区 观察现象 测试1 测试2 测…

【专题】2024年云计算白皮书报告合集PDF分享(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p37112 2023年全球云计算市场显著增长&#xff0c;预计将持续繁荣至2027年突破万亿美元&#xff0c;中国市场同样保持强劲势头&#xff0c;预计也将大幅跃升。国内云计算经过十余年发展&#xff0c;虽取得显著进展&#xff0c;但在资…

高温天消暑需求暴涨,益民一厂产线全开,光明冷饮销量猛增

天气炎热&#xff0c;带动了冷饮销量直线上升&#xff0c;上海地区的冷饮日销量达到了7到8万箱&#xff0c;再创历史新高&#xff0c;作为代表国潮经典的冷饮品牌——光明冷饮也成为了人们夏日消暑的优选。2024年7月23日&#xff0c;上海广播电视台新闻综合频道《新闻夜线》栏目…

谷粒商城实战笔记-64-商品服务-API-品牌管理-OSS前后联调测试上传

文章目录 1&#xff0c;拷贝文件到前端工程2&#xff0c;局部修改3&#xff0c;在品牌编辑界面使用上传组件4&#xff0c;OSS配置允许跨域5&#xff0c;测试multiUpload.vue完整代码singleUpload.vue完整代码policy.js代码 在Web应用开发中&#xff0c;文件上传是一项非常常见的…

单元测试--Junit

Junit是Java的单元测试框架提供了一些注解方便我们进行单元测试 1. 常用注解 常用注解&#xff1a; TestBeforeAll&#xff0c;AfterAllBeforeEach&#xff0c;AfterEach 使用这些注解需要先引入依赖&#xff1a; <dependency><groupId>org.junit.jupiter<…

Linux开启coredump

在Linux系统中&#xff0c;C/C程序崩溃是常见的问题之一。Coredump是指当一个程序崩溃时&#xff0c;系统把程序运行时的内存数据以二进制文件的形式保存下来&#xff0c;以便程序开发者进行崩溃分析。本文将介绍如何开启并配置Coredump 1、查看并配置coredump 在Linux系统中…

html+css前端作业 王者荣耀官网1个页面(带报告)

htmlcss前端作业 王者荣耀官网1个页面&#xff08;带报告&#xff09; 下载地址 https://download.csdn.net/download/qq_42431718/89575045 目录1 目录2 项目视频 王者荣耀首页1个页面&#xff08;无js&#xff09; 页面1

Android statsd 埋点简析

源码基于&#xff1a;Android U 0. 前言 最近在研究 Android 自带的系统数据指标采集功能&#xff0c;框架依旧很严谨、完美&#xff0c;这里做个分享。 1. Android S 之后变化 stats 的代码从 framework 或 system/core 中转移到了 packages/modules/StatsD 目录中。 2. 框架…

基于PSO粒子群优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 粒子群优化算法&#xff08;PSO&#xff09; 4.2 分组卷积神经网络&#xff08;GroupCNN&#xff09; 4.3 PSO优化GroupCNN 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行…

算法第十五天:leetcode19.删除链表的倒数第N个节点

一、删除链表的倒数第N个节点的题目描述与链接 19.删除链表的倒数第N个节点的链接如下表所示&#xff0c;您可直接复制下面网址进入力扣学习&#xff0c;在观看下面的内容之前您一定要先做一遍哦&#xff0c;以便让我印象更深刻&#xff01;&#xff01;!https://leetcode.cn/p…

stm32串口通信协议(标准库 and HAL库)

刚入门32&#xff0c;接触的第一个通信协议就是串口通信&#xff0c;所谓通信协议&#xff0c;就是指两个设备之间互联&#xff0c;将两个设备关联起来&#xff0c;使其可以相互之间传输数据&#xff0c;利用串口通信最常见的例子就是蓝牙模块。 下面为学习串口之后的一些简单…

快速入门了解Ajax

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;JavaWeb关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Ajax的初识 意义&#xff1a;AJAX&#xff08;Asynchronous JavaScript and…

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

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

基于JSP、java、Tomcat、mysql三层交互的项目实战--校园交易网(1)-项目搭建(前期准备工作)

这是项目的初始页面 接下来我先写下我的初始项目搭建 技术支持&#xff1a;JAVA、JSP 服务器&#xff1a;TOMCAT 7.0.86 编程软件&#xff1a;IntelliJ IDEA 2021.1.3 x64 首先我们打开页面&#xff0c;准备搭建项目的初始准备 1.New Project 2.随后点击Next&#xff0c;勾…

【C++经典面试题】字符串类String的接口代码实现(重点考察对浅拷贝与深拷贝的理解)

在C++程序中会频繁地使用到字符串,很多信息是作为字符串保存在内存中的。字符串类是C++程序中常用的类之一,比如MFC中的CString类、C++标准库中的string(ANSI窄字节版本)和wstring(UNICODE宽字节版本)类。 C++程序员在面试时时常会遇到字符串相关的问题,比如一个…

Python酷库之旅-第三方库Pandas(046)

目录 一、用法精讲 161、pandas.Series.cumsum方法 161-1、语法 161-2、参数 161-3、功能 161-4、返回值 161-5、说明 161-6、用法 161-6-1、数据准备 161-6-2、代码示例 161-6-3、结果输出 162、pandas.Series.describe方法 162-1、语法 162-2、参数 162-3、功…

visual studio 配置路径中 用户宏的修改(备忘)

visual studio 2013 开发工具界面中&#xff1a;视图 --> 其它窗口 --> 属性管理器 &#xff08;如下图&#xff09; 接着开发工具界面会显示出“属性管理器”的界面 &#xff08;如下图&#xff09; 在‘属性管理器’界面中&#xff0c;找到‘opencv’右击&#xff…

ctfshow-web入门-php特性(web132-web136)

目录 1、web132 2、web133 3、web134 4、web135 5、web136 1、web132 存在 robots.txt 访问 /admin 需要传三个参数&#xff0c;并且需要满足&#xff1a; if($code mt_rand(1,0x36D) && $password $flag || $username "admin"){if($code admin){ech…

shell-awk文本处理工具

1、awk概述 AWK 是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具。 它是专门为文本处理设计的编程语言&#xff0c;也是行处理软件&#xff0c;通常用于扫描、过滤、统计汇总工作 数据可以来自标准输入也可以是管道或文件 在 linux 上常用的是 gawk,awk …

【Gitlab】SSH配置和克隆仓库

生成SSH Key ssh-keygen -t rsa -b 4096 私钥文件: id_rsa 公钥文件:id_rsa.pub 复制生成的ssh公钥到此处 克隆仓库 git clone repo-address 需要进行推送和同步来更新本地和服务器的文件 推送更新内容 git push <remote><branch> 拉取更新内容 git pull &…