Java基础学习笔记(一)面向对象

news2024/11/20 13:23:30

序言:主要记录一下java的学习笔记,用作面试复习,参考的学习资料是尚硅谷Java网课链接

面向对象是P39~P69内容

文章目录

        • 一、类和对象
        • 二、传值方式
        • 三、静态与静态代码块
        • 四、包
        • 五、构造方法
        • 六、继承与构造方法
        • 七、多态
        • 八、方法的重载与重写
          • 8.1 重载
          • 8.2 重写
        • 九、访问权限

一、类和对象

概念不赘述,这里记录一些术语和例子:

  1. 对象将内存地址赋值给了变量,所以变量引用了内存中的对象,所以称之为引用变量,而该变量的类型称之为引用数据类型。

  2. 此外还有空对象,所有引用类型变量的默认取值就是null

  3. 属性:类的对象的相同特征

二、传值方式

Java只有值传递。
首先明白:Java内存主要由三部分组成:


  1. (1) 存放new的对象和数组
    (2) 可以被所有线程共享,不会存放别的对象引用
    (3) 引用数据对象是放在堆中的

  2. (1) 存放基本数据类型
    (2) 引用对象的变量
  3. 方法区
    (1) 可以被所有线程共享
    (2) 包含了所有的class和static变量

Java中每个方法进入运行时,JVM都会创建一个栈帧,然后将栈帧压入栈中,如果方法中还嵌套有方法就继续创建栈帧,执行完后弹出栈帧即可。

比如有main方法和test方法,有以下代码:

    public static void main(String[] args) {
        int i = 10;
        test(i);
        System.out.println(i);
    }
    public static void test(int i){
        i = i+10;
    }

打印出来的结果是i = 10,在这里插入图片描述
栈帧不同,内存区域不同,运行完test方法后,弹出栈帧,但是i的值不会改变,接着进行输出,则输出10
第二个例子:

    public static void main(String[] args) {
        String s = "abc";
        test(s);
        System.out.println(s);
    }
    public static void test(String s){
        s = s+10;
    }

在这里插入图片描述
打印出s的结果仍然是abc,(个人理解)这里在运行test方法时,s是指向的abc的一个副本abc,然后s = s+10使得该副本变成了abc10,也就是上图紫色圆圈所示。

s = s+10

拓展:此处+号的进行字符串拼接的原理是StringBuilder.append()方法;

s = (new StringBuilder().append(s).append("10").toString());

第三个例子:

public static void main(String[] args) {
    User user = new User();//引用数据类型是放于堆中的
    user.name = "张三";
    test(user);
    System.out.println(user.name);
}
public static void test(User user){
    user.name = "李四";
}

在这里插入图片描述
在这里插入图片描述

三、静态与静态代码块

把和对象无关,只和类相关的概念称之为静态
把和类相关的属性称之为静态属性
把和类相关的方法称之为静态方法
静态语法就是在属性和方法前增加static关键字

package com.example.Test;

public class Test04 {

	public static void main(String[] args) {
		Test t = new Test();
		//成员方法可以访问静态属性和静态方法
		//但是静态方法不可以访问静态属性和静态方法
		t.test();
		t.test1();
		Test.test1();
	}
}

class Test{
	String name;
	static String sex;
	
	void test() {
		//成员方法可以调用静态方法
		test1();
		System.out.println("test...");
	}
	static void test1() {
		System.out.println("test1...");
	}
}

在这里插入图片描述
静态代码块:
可以用来完成静态属性的初始化功能。

类的信息被加载完成后,会自动加载静态代码块,不管是new对象还是调用类中的方法。
但代码块只有在对象创建时才会被调用。

四、包

主要功能:对类进行分类管理
基本语法:

package 包完整路径
如:
package chapter01;
package chapter01.childpackage;

一个类可以没有包,但是最多一个。包名一般小写,小写方便区分包和类。

java存在不同包的相同名称的类,可以使用包进行区分
如 java.util.Date()
java.lang包是自动import好的,但java.util.Date之类的包就需要手动import.
若import的包里有相同名称的类,那么在使用类时仍然需要增加包名。

五、构造方法

构造方法:专门用于构建对象,类在创建时JVM会自动添加一个无参构造方法。

但是当手写了有参构造方法时,无参构造方法也必须显式的定义出来。有参构造方法一般是用于对象属性的赋值。

//在new对象时,就会调用构造方法
User user = new User();

当类中含有代码块和构造方法时,会先执行代码块,再执行构造方法的内容。

六、继承与构造方法

继承可以减少代码编写,提高效率

  1. 类存在父子关系:子类可以直接获取到父类的成员属性和成员方法。

  2. 类的继承只能是单继承,一个类只能有一个父类,但一个父类可以有多个子类。

  3. 注:接口可以是多继承的

  4. 如果父类和子类含有相同的属性,那么可以采用特殊的关键字进行区分(super和this)

    package com.example.Test;
    
    public class Test05 {
    	public static void main(String[] args) {
    		Child cld = new Child();
    		System.out.println(cld.name);
    		cld.test();
    	}
    }
    
    class Parent{
    	String name = "ZhangSan";
    }
    
    class Child extends Parent{
    	String name = "LiSi";
    	void test() {
    		System.out.println(super.name);
    		System.out.println(this.name);
    	}
    }
    

    在这里插入图片描述

  5. 父类对象在子类对象创建前创建出来,创建子类对象前,会先调用父类的构造方法。

    public class Test05 {
    	public static void main(String[] args) {
    		Child cld1 = new Child();
    		Child cld2 = new Child();
    		Child cld3 = new Child();
    		
    	}
    }
    class Parent{
    	Parent(){
    		System.out.println("Parent");
    	}
    }
    class Child extends Parent{
    	Child(){
    		System.out.println("Child");
    	}
    }
    

    在这里插入图片描述

  6. 当子类对象构造时我们知道会先调用父类的构造方法,默认情况下,使用的是super的方式,JVM会自动完成无参的super形式。即

    class Child extends Parent{
    	Child(){
    		super();//这里可以省略不写,因为JVM默认写好了
    		System.out.println("Child");
    	}
    }
    

    但是当父类有参时,我们就需要手动写含参数的super方法了,因为JVM只提供了无参的super方法
    例:

    public class Test05 {
    	public static void main(String[] args) {
    		Child cld1 = new Child();
    		Child cld2 = new Child();
    		Child cld3 = new Child();
    		
    	}
    }
    
    class Parent{
    	String username;
    	Parent(String name){
    		username = name;
    		System.out.println("Parent");
    	}
    }
    
    class Child extends Parent{
    	Child(){
    		super("zhangsan");
    		System.out.println("Child");
    	}
    }
    

七、多态

多态是一个对象在不同场景下表现出来的不同状态和形态

package com.example.Test;

public class MultiStatus {
	public static void main(String[] args) {
		Person person = new Person();
		Person boy = new Boy();
		Person girl = new Girl();
		
		person.PersonTest();
		//子类可以调用父类的成员属性和成员方法
		//boy.PersonTest();
		//girl.PersonTest();
		
		//多态语法对对象的使用场景进行了约束
		//这里也可以理解为Person对象没有子类的功能
		boy.BoyTest();//编译器报错
		girl.GirlTest();//编译器报错
	}
	
	
}
class Person{
	void PersonTest() {
		System.out.println("PersonTest...");
	}
}

class Boy extends Person{
	void BoyTest() {
		System.out.println("BoyTest");
	}
}


class Girl extends Person{
	void GirlTest() {
		System.out.println("GirlTest");
	}
}

在这里插入图片描述

八、方法的重载与重写

8.1 重载

方法重载:方法名相同,参数列表(个数,顺序,类型)不相同

注:构造方法也存在重载

实例:
在这里插入图片描述

在这里插入图片描述
在无法匹配参数时,基本数据类型可以通过提高精度来适配。
但是注意char类型不能与数值类型适配

而对于自定义的类无法匹配方法参数时,当前类会向它的父类去寻找适配参数,实例:
可以适配时:
在这里插入图片描述
不适配时:

在这里插入图片描述
B由于继承了A类,故B的父类是A,如果方法参数不是A,那么会去Object类寻找
B->A->Object

8.2 重写

九、访问权限

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

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

相关文章

[JAVA安全]CVE-2022-33980命令执行漏洞分析

前言 在 i春秋的漏洞靶标上看见了此漏洞,所以前来分析一下漏洞原理,比较也是去年 7月的漏洞。 漏洞描述:Apache官方发布安全公告,修复了一个存在于Apache Commons Configuration 组件的远程代码执行漏洞,漏洞编号&am…

Linux驱动

Linux驱动 驱动 1.驱动课程大纲  内核模块  字符设备驱动  中断 2.ARM裸机代码和驱动有什么区别?  共同点:都能够操作硬件 (都操作寄存器)  不同点:  裸机就是用C语言给对应的寄存器里面写值,驱动是按照一定的框架格…

FastReport .NET 2023.1.8 Crack

FastReport .NET适用于 .NET 6、.NET Core、Blazor、ASP.NET、MVC 和 Windows 窗体的全功能报告库。它可以在 Microsoft Visual Studio 2022 和 JetBrains Rider 中使用。 快速报告.NET 利用 .NET 6、.NET Core、Blazor、ASP.NET、MVC、Windows Forms 和 Mono 数据表示领域专家…

前端入门笔记07 —— js应用

DOM基础 document object model 基本操作 增删改查 查: document成员函数传入 id class tagName等内容获取DOM节点css选择去查询节点获取的DOM对象访问DOM对象的成员 let domResult; domResult document.getElementsByTagName(li); //返回一个类数组对象 Node…

Electron对在线网站做数据交互方案,实现在线网站判断Electron调用自定义接口通讯

(防盗镇楼)本文地址:https://blog.csdn.net/cbaili/article/details/128651549 前言 最近在撸VUE,想要实现一份代码既能构建Web又能构建Electron应用 并且能够判断环境是浏览器还是Electron,随后在Electron中做一些特定的事情 以往的Electron通信依靠IPC通信完成,但是发布到…

2023年,“新一代”固定资产管理平台——支持低代码平台

固定资产是各企业和工厂的主要生产要素,占企业整体资金比例较重,而且随着企业的发展,实物资产的数量和员工日益增多,固定资产的重要性日益凸显。如何高效管理这些实物资产也成了企业管理者经常考虑的问题。单纯依靠人工表格管理固…

python(一) 字符串基本用法

python(一) 字符串基本用法 目录1.环境安装2. 变量介绍3.变量的命名规则4. 字符串 String 基础4.1 title() 修改单词的大小写 title()4.2 upper() : 将字符串全部改为大写4.3 lower(): 将字符串全部改为小写4.4 字符串的拼接 合并字符串5. 使用制表符或者…

关于抖音年前活动的需求与思考

目录 一、前言 二、需求1 1、后端需求 2、前端需求 三、领取抽卡次数需求 1、后端需求 2、前端需求 四、必得现金红包需求 五、送重复卡需求 1、后端需求 2、前端需求 六、幸运抽奖需求 1、抽奖功能 1.1、首次(或多次)3张节气卡 抽奖 1.2、非首次或多次后5张节气…

【阶段三】Python机器学习14篇:机器学习项目实战:支持向量机分类模型

本篇的思维导图: 项目实战(支持向量机分类模型) 项目背景 目前各大新闻网站很多,网站上的消息也是各式各样,本项目通过建立支持向量机分类模型进行新闻文本分类。 数据收集 所需要的数据文件如下百度云盘链接: 链接:https://pan.baidu.com/s/1Zj-uTt_wdRcmDt3aumZ…

Java加解密(七)数字签名

目录数字签名1 定义2 数字签名特点3 应用场景4 JDK支持的信息摘要算法5 Bouncy Castle 支持的信息摘要算法6 算法调用示例数字签名 1 定义 数字签名(digital signature)是一种电子签名,也可以表示为一种数学算法,通常用于验证消…

【强训】Day06

努力经营当下,直至未来明朗! 文章目录一、选择二、编程1. 不要二2. 把字符串转换成整数答案1. 选择2. 编程普通小孩也要热爱生活! 一、选择 关于抽象类与最终类,下列说法错误的是? A 抽象类能被继承,最终…

C语言零基础项目:六边形扫雷寻宝模式,详细思路+源码分享

程序简介六边形扫雷,寻宝模式,稍稍介绍一下。他也是要把所有安全的地方点出来。他没有扫雷模式的消零算法。每一个安全的点都需要单独挖出来,一次显示一个格子。添加了生命值的概念,也就是说存在一定的容错。显示的数字有别于扫雷…

亚马逊云科技 2022 re:Invent 观察 | 天下武功,唯快不破

引子“天下武功,无坚不摧,唯快不破”,相信大家对星爷电影《功夫》中的这句话耳熟能详。实际上,“天下武功,唯快不破”最早出自古龙先生的著名武侠小说《小李飞刀》:“小李飞刀,例无虚发&#xf…

LeetCode(String) 2325. Decode the Message

1.问题 You are given the strings key and message, which represent a cipher key and a secret message, respectively. The steps to decode message are as follows: Use the first appearance of all 26 lowercase English letters in key as the order of the substit…

React生命周期详解

React 类组件生命周期 React 有两个重要阶段 render 阶段和 commit 阶段,React 在调和( render )阶段会深度遍历 React fiber 树,目的就是发现不同( diff ),不同的地方就是接下来需要更新的地方,对于变化的组件,就会执…

Linux杂谈之java命令

一 java (1)基本解读 ① JAVA8 官方命令行参数 linux版的java 重点关注: java、javac、jar、keytool 这三个参数学习方式: 通过man java和官方文档快速学习 如何在官网搜索 java的命令行参数用法 ② 语法格式 ③ 描述 1)…

Java开发为何深入人心 ?我来带你解开 Spring、IoC、DI 的秘密~

目录 一、什么是Spring? 1.1、什么是容器? 1.2、IoC是什么? 1.3、IoC带来了什么好处? 二、什么是DI? 2.1、IoC和DI有什么关系? 一、什么是Spring? 一句概括,Spring 是包含了众多⼯具⽅法的 IoC 容器…

RHCE第七天之防火墙详解

文章目录一、 基本概念二、iptables三、firewalld四、实验练习一、 基本概念 什么是防火墙?路由策略和策略路由/ipsec vpn gre hdlc ppp 硬件 iDS 在计算中,防火墙是基于预定安全规则来监视和控制传入和传出网络流量的网络安全系统。该计算机流入流出的…

React基础梳理,万字总结,总能帮到你~

第1章:React入门 1.1.React简介 1.英文官网: reactjs.org/2.中文官网: react.docschina.org/3.用于动态构建用户界面的 JavaScript 库(只关注于视图)4.Facebook开源 React的特点 1.声明式编码2.组件化编码3.React Native 编写原生应用4.高效(优秀的D…

CodeCraft-22 and Codeforces Round #795 (Div. 2)

A. Beat The Odds 题目链接: Problem - A - Codeforces 样例输入: 2 5 2 4 3 6 8 6 3 5 9 7 1 3样例输出: 1 0题意:给定一个长度为n的数组,我们可以对这个数组进行操作,每次操作可以删除一个数&#xff…