Java基础——大杂烩

2023-11-13

今天阿Q给大家来一节大杂烩,讲一下专题性不强的java基础知识。

main方法详解

public static void main(String[] args){} 这里面只有args能改变

  • public 被jvm调用,访问权限足够大
  • ​static 被jvm调用,不用创建对象,直接类名访问
  • void被jvm调用,不需要给jvm返回值
  • ​main 一个通用的名称,虽然不是关键字,但是被jvm识别
  • String[] args 用于接收键盘录入
工具类

工具类一般在项目中是经常被使用的类,所以为了方便调用,直接把类里面的方法都写成静态的,直接让类名调用就好了。工具类里面的构造方法被私有,目的是不让外界创建工具类的对象。

//这是一个数组工具类,里面封装了查找数组最大值,打印数组,数组反转的方法
public class ArrayTool {
	//如果一个类中所有的方法都是静态的,需要再多做一步,私有构造方法,目的是不让其他类创建本类对象
	//直接用类名.调用即可
	/**
	私有构造方法
	*/
	private ArrayTool(){}

	/**
	这是获取数组中最大值的方法
	@param arr 接收一个int类型数组
	@return 返回数组中最大值
	*/
	public static int getMax(int[] arr) {
		int max = arr[0];			//记录第一个元素
		for (int i = 1;i < arr.length ;i++ ) {	//从第二个元素开始遍历
			if (max < arr[i]) {		//max与数组中其他的元素比较
				max = arr[i];		//记录住较大的
			}
		}
		return max;				//将最大值返回
	}

	/**
	这是遍历数组的方法
	@param arr 接收一个int类型数组
	*/
	public static void print(int[] arr) {
		for (int i = 0;i < arr.length ;i++ ) {	//遍历数组
			System.out.print(arr[i] + " ");
		}
	}

	/**
	这是数组反转的方法
	@param arr 接收一个int类型数组
	*/
	public static void revArray(int[] arr) {
		for (int i = 0;i < arr.length / 2 ;i++ ) {	//循环次数是元素个数的一半
			/*
			arr[0]与arr[arr.length-1-0]	交换
			arr[1]与arr[arr.length-1-1]	交换
			arr[2]与arr[arr.length-1-2]	交换
			*/
			int temp = arr[i];
			arr[i] = arr[arr.length-1-i];
			arr[arr.length-1-i] = temp;
		}
	}
}

查看API 发现Math这个类是数学运算的工具类,构造方法私有的,里面全是静态的方法。

//Math.random()会生成大于等于0.0并且小于1.0的伪随机数
public static double random(); 

//1-100的随机整数  
(int)(Math.random()*100)+1
final
  • final修饰的类:不能被继承
  • final修饰的方法:不能被重写
  • final修饰的变量是常量: 常量只能被赋值一次

注意:被final修饰的引用型变量,其里面的内容可以改变(也就是地址值不能被改变,对象中的属性可以改变)

常量:分为自面值常量和自定义常量,自面值常量:1;1.0;“abc”;‘a’;自定义常量:就是被final修饰的变量就是自定义常量,自定义常量的命名规则是所有字母都大写,如果是多个单词,中间用 _ 隔开。

	class Demo{
		public static void main(String[] args) {

			final int A = 10;
			A = 20;			//被final修饰的变量是常量,只能被赋值一次
	
			final Student S = new Student("张三",23);
			S = new Student("李四");//被final修饰的变量是常量 只能被赋值一次

			final Student S = new Student("张三",23);
			//被final修饰的变量是常量只能被赋值一次,但是S这个地址值所指向的对象里面的内容可以改变
			S.name = "李四";	
			S.age = 14;

			Student s = new Student();
			s.eat();		//被final修饰的方法,可以被子类继承,但是不能被子类重写
		}
	}

	class Person{
		public final void eat(){
			System.out.println("吃吃");
		}
	}

	class Student extends Person{
		String name = "zhangsan" ;
		int age = 10;
 		//对象中的常量,必须显示初始化,或者构造初始化,不能只使用默认初始化,所以这个地方报错
		final int hehe ;
		public Student(){}
		public Student(String name , int age){
			this.name = name;
			this.age = age;
		}
		public void study(){
			System.out.println("学生学习");
		}
	
		public void eat(){		//不能重写父类的eat() 因为父类的eat()被final修饰
			System.out.println("吃吃这是小孩说的 大人得说 吃饭");
		}

	}
抽象类

用abstract这个关键字修饰的类就叫做抽象类,用这个关键字修饰的方法并且不能有方法体就是抽象方法。

  • 抽象类中不一定有抽象方法,但是有抽象方法的类势必是抽象类。
  • 抽象类不能被实例化
	class Animal_test{
			public static void main(String[] args){
				Animal a = new Animal();		//报错 因为抽象类不能被实例化
				Animal a1 = new Cat();			//这样可以,这是多态
			}
		}
		abstract class Animal {					//抽象类
			public abstract void eat();			//抽象方法				
		}
		class Cat extends Animal {
			public void eat() {				//子类重写父类的抽象方法
				System.out.println("猫吃鱼");
			}
		}
  • 子类继承抽象类,要么子类是抽象类不用重写父类的抽象方法(因为子类是抽象类嘛),要么子类是非抽象类就必须全部重写父类的抽象方法。
  • 抽象类的成员特点:成员变量可以有变量也可以有常量;有构造方法,是为了给子类继承父类初始化父类用的,成员方法可以是抽象方法,也可以是非抽象方法。
  • abstract不能和哪些关键字共存呢?
    private:private修饰的方法是不能被继承的,所以不能被重写,而abstract强制要求子类重写,矛盾
    final:final表示最终的意思,修饰方法,不能被重写,而abstract强制要求子类重写,矛盾
    static:static是为了让所有对象共享,为了让类名调用,来执行一些方法里面的内容的,而abstract修饰方法是抽象方法 没有方法体, 那让对象共享一个没有方法体的方法没有意义。
接口

接口Interface,类与接口是实现关系类,实现接口用关键字 implements表示,接口中的方法全都是抽象方法,子类(非抽象的类)实现接口,必须全部重写里面的抽象方法。

	class Demo1_Interface {public static void main(String[] args) {//Inter i = new Inter();	//接口不能被实例化,因为调用抽象方法没有意义Inter i = new Demo();		//父类引用指向子类对象
​			i.print();}}interface Inter {public abstract void print();//接口中的方法都是抽象的public abstract void method();}class Demo implements Inter {public void print() {			//非抽象的类实现接口,必须全部重写里面的抽象方法System.out.println("print");}public void method(){System.out.println("method");}}
  • 接口中的成员特点

    成员变量: 接口里面的变量全都是常量,因为前面默认都加了 public static final

    interface Inter {
    	int a;				//报错 因为a是常量 必须显示初始化
    	int b =10;			//b也是常量 因为前面有默认修饰符 public static final
    }
    

    构造方法:没有构造方法
    成员方法:接口里面的方法都是抽象方法,前面都有默认修饰符 public abstract

  • 类与类,类与接口,接口与接口的关系

    类与类:继承关系 ,可以单继承,也可以多层继承,不能多继承
    类与接口:实现关系,可以单实现,也可以多实现
    接口与接口: 继承关系,可以单继承,也可以多继承

案例:

​ /*

​ 动物类:姓名,年龄,吃饭,睡觉。

​ 猫和狗

​ 动物培训接口:跳高
​ */

	class Test1_Animal {public static void main(String[] args) {Cat c = new Cat("加菲",8);
​			c.eat();
​			c.sleep();JumpCat jc = new JumpCat("跳高猫",3);
​			jc.eat();
​			jc.sleep();
​			jc.jump();}}

abstract class Animal {
	private String name;				//姓名
	private int age;				//年龄

	public Animal() {}				//空参构造

	public Animal(String name,int age) {		//有参构造
		this.name = name;
		this.age = age;
	}

	public void setName(String name) {		//设置姓名
		this.name = name;
	}

	public String getName() {			//获取姓名
		return name;
	}

	public void setAge(int age) {			//设置年龄
		this.age = age;
	}

	public int getAge() {				//获取年龄
		return age;
	}

	public abstract void eat();			//吃饭

	public abstract void sleep();			//睡觉
}

interface Jumping {					//跳高的接口
	public void jump();
}

class Cat extends Animal {
	public Cat() {}					//空参构造

	public Cat(String name,int age) {//有参构造
		super(name,age);
	}

	public void eat() {
		System.out.println("猫吃鱼");
	}

	public void sleep() {
		System.out.println("侧着睡");
	}
}

class JumpCat extends Cat implements Jumping {
	public JumpCat() {}				//空参构造

	public JumpCat(String name,int age) {		//有参构造
		super(name,age);
	}

	public void jump() {
		System.out.println("猫跳高");
	}
}

好了今天就先说到这了,明天继续。想了解更多学习知识,请关注微信公众号“阿Q说”,获取更多学习资料吧!你也可以后台留言说出你的疑惑,阿Q将会在后期的文章中为你解答。每天学习一点点,每天进步一点点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java基础——大杂烩 的相关文章

  • 抽象方法错误

    我正在 netbeans 中开发一个项目 当我使用 glassfish 3 1 2 启动它时 一切正常 但是当我调用映射到以下方法的 invite url 时 RequestMapping value invite method Reque
  • 在 Java 中对变量使用 Final 是否可以改善垃圾回收?

    今天我和同事们讨论了finalJava 中的关键字可改善垃圾收集 例如 如果您编写如下方法 public Double doCalc final Double value final Double maxWeight 1000 0 fina
  • 不使用“final”怎么会成为安全问题呢?

    摘自 O Reilly s 第 113 页基本 ActionScript 3 0 2007 最终方法有助于隐藏类的内部细节 制作一个类或一个 方法final阻止其他程序员扩展类或重写 用于检查类内部结构的方法 这样的预防 被认为是方法之一保
  • 抽象方法的协变返回类型问题

    我正在尝试结束为期两天的关于抽象方法和返回类型协方差的讨论 我已经发布了两个类似的问题 我永远感谢社区提供的信息 我只需要最后一次推动即可到达终点线 这就是我想要做的 两个抽象类 RecruiterBase 和 CandidateBase
  • 让 Swift 相信函数由于抛出异常而永远不会返回

    因为 Swift 没有抽象方法 所以我创建了一个方法 其默认实现无条件地引发错误 这会强制任何子类重写抽象方法 我的代码如下所示 class SuperClass func shouldBeOverridden gt ReturnType
  • 在循环内创建最终变量

    java中允许这样吗 for int i 0 i lt 5 i final int myFinalVariable i 我的问题的关键词是final 是否允许在每次循环运行时更改最终变量 我想知道这一点 因为 Final 说你不能更改变量的
  • 最终的定义不明确吗?

    首先是一个谜题 下面的代码打印什么 public class RecursiveStatic public static void main String args System out println scale 5 private st
  • Java构建时间常数配置

    我有一个项目想使用多种配置来构建 我有一个常量需要在构建之间有所不同 但我不知道如何根据我的配置更改它 例如 我希望能够根据配置文件中的值执行以下操作 WebService targetNamespace http example com
  • 抽象基类的重写属性抛出堆栈溢出异常

    我有一个基类 其声明如下 为了简洁而进行了修剪 public abstract class MyBaseClass public int RecordId get private set public string ObjectName g
  • 即使未实现抽象方法,实例化抽象类时也不会出现错误

    我正在尝试下面的Python代码 from abc import ABCMeta abstractmethod class Bar metaclass ABCMeta abstractmethod def foo self pass cla
  • Java 最终抽象类

    我有一个非常简单的问题 我想要一个 Java 类 它提供一个公共静态方法 该方法可以执行某些操作 这只是为了封装目的 将所有重要的内容都放在一个单独的类中 这个类既不应该被实例化 也不应该被扩展 这让我写道 final abstract c
  • Java 中的最终变量操作

    谁能告诉我下面这行在 Java 上下文中的含义是什么 最终变量仍然可以是 被操纵 除非它是不可变的 据我所知 通过将任何变量声明为最终变量 您将无法再次更改它 那么它们的含义是什么不可变的在上面一行 这意味着如果您的最终变量是引用类型 即不
  • 是什么导致不可变对象在没有安全发布技术的情况下被发布?

    即使不诉诸安全发布习惯用法 也可以发布不可变对象 这是什么意思 我读过了Java 并发实践 第3章 共享对象 但仍然无法理解该声明 不可变对象可以通过任何机制发布 V S 应该安全地发布有效的不可变对象 编辑 我经历过SO类似的问题 htt
  • 为什么将类定义为 Final 可以提高 JVM 性能?

    引用自http sites google com site gson gson design document http sites google com site gson gson design document 为什么Gson中的大多
  • 使用final关键字声明一个List字段

    如果我在课堂上有以下声明Synapse是一个抽象类型 private final List
  • 在 Java 中,集合是最终的意味着什么? [复制]

    这个问题在这里已经有答案了 在 Java 中将集合声明为 Final 意味着什么 是不是不能再添加更多的元素了 难道已经存在的元素就不能改变了吗 难道是别的什么 不 这只是意味着引用不能更改 final List list new Link
  • Dart 中的“const”和“final”关键字有什么区别?

    两者有什么区别const and finalDart 中的关键字 dart 的网站上有一篇文章 解释得很好 https news dartlang org 2012 06 const static final oh my html Fina
  • 使用 < 有什么区别? java 泛型中的 extends SomeAbstract> 与 SomeAbstract

    我将从 DotNet 转向 java 这种扩展的想法是新的 我看过一些帖子充分解释了使用List
  • 在java中将对象声明为final

    有人可以澄清以下代码的意义吗 class A int i 10 public void setI int b i b public int getI return i class Test public static void main S
  • Java中的静态最终变量[重复]

    这个问题在这里已经有答案了 可能的重复 私有最终静态属性与私有最终属性 https stackoverflow com questions 1415955 private final static attribute vs private

随机推荐

  • 【自我提高】树莓派GPIO的几种语言控制方法 python 篇

    使用 python 语言控制 GPIO 18 首先知道树莓派外置IO的关系对照表 我这里的树莓派是 PI 3B V1 2 关系对照表如下 首先安装 python 和 GPIO 库 具体安装过程参考 https blog csdn net w
  • DETR论文解读

    DETR基本介绍 DETR的一个创新是端到端的目标检测 它能够将目标检测看做成集合预测问题 而不需要像之前的目标检测算法需要anchor或者nms等 总之就是一个将CNN和transformer结合的一个新颖的目标检测框架 改变预测头还可以
  • Android studio 一个项目引入另一个项目作为Libary

    1 在我们开发Android项目时 有时需要一个项目作为另一个项目的工具类的引用 这样就需要配置下 使得MyLibrary到MyApplication作为一个module 我们直接截图上步骤 1 假设我们新建两个项目 一个是引入的项目 一个
  • Error: failed to create deliver client :orderer client failed to connect to orderer

    问题描述 在部署fabric时 peer create channel时报错如下 Error failed to create deliver client orderer client failed to connect to order
  • linux删除某个目录下旧文件只保留最新的10个

    find aaa bbb ccc d name mingcheng sort head n 10 xargs rm rf 指令解析 find aaa bbb ccc d 意思是 在 aaa bbb ccc查找文件夹 name mingche
  • Redis-应用问题解决

    缓存穿透 缓存穿透现象 应用服务器压力变大 redis命中率降低 一直查询数据库 原因 redis查询不到数据库 出现很多非正常url访问 解决方案 1 对空值缓存 如果一个查询返回的数据为空 不管是数据是否不存在 我们仍然把这个空结果 n
  • 【C++设计模式】详解装饰模式

    2023年8月31日 周四上午 这是我目前碰到的最难的设计模式 非常难以理解而且比较灵活多半 学得贼难受 写得贼费劲 2023年8月31日 周四晚上19 48 终于写完了 花了一天的时间来学习装饰模式和写这篇博客 虽然基本上把我今天的收获都
  • 点在多边形内的判断

    c语言代码 typedef struct tagVERTEX double x double y VERTEX 判断点与多边形关系 0 外 1 上 2 内int PointInPolygon VERTEX pt VERTEX vtx int
  • Pgsql报错:PostgreSQL的SQL语句参数上限报错

    org postgresql util PSQLException An I O error occurred while sending to the backend Caused by java io IOException Tried
  • maven 全入门

    使用SPRINGSOURCE TOOL SUITE创建maven web project 推荐使用springsource的sts 一款基于eclipse整合的ide sts下载地址 安装好m2clipse插件后 在ide菜单栏点击 win
  • mssql sqlserver 获取指定日期为本月第几个工作日

    转自 https www cnblogs com lairui1232000 p 9286104 html 摘要 下文讲述工作中 需要获取指定日期在当月的工作日 下文讲述常规的指定工作日所在月的天数分析 实现思路 1 生成一个国家法定假日表
  • C#的笔记属性索引器,委托事件,泛型集合,异常捕捉

    C 有一些与其他语言C Java不同的特性这里特别记一下 他们大部分基本的内容是相同的 C 有属性索引器 委托事件 泛型集合 trycatchfinally异常捕捉 属性Property 属性时一种很像字段的方法 他有getset访问器 使
  • 高并发高可用(二)架构

    4 大型网站架构模式 模式词汇来源于建筑学 定义 每个模式描述一个在我们周围不断重复发生发生的问题及该问题解决方案的核心 这样你就能一次又一次使用该方案而不必做重复的工作 为解决大型网站所遇到的高并发访问 海量数据处理 高可用运行等系列问题
  • MySQL的预读机制

    一 预读机制 InnoDB在I O的优化上有个比较重要的特性为预读 预读请求是一个i o请求 它会异步地在缓冲池中预先回迁多个页面 预计很快就会需要这些页面 这些请求在一个范围内引入所有页面 InnoDB以64个page为一个extent
  • 网上书店管理系统 课程设计

    数据库原理及应用 综合设计报告 第一章 绪论 随着计算机技术的发展以及计算机网络的逐渐普及 因特网成为了人们查找信息的重要场所 二十一世纪是信息的时代 所以信息的交换和信息的流通就显得特别的重要 因此网上书店的出现成为必然 实体书店在正常运
  • pytorch 入门 DenseNet

    知识点0 dense block的结构 知识点1 定义dense block 知识点2 定义DenseNet的主体 知识点3 add module 知识点 densenet是由 多个这种结构串联而成的 import torch import
  • Retrofit2 使用@Multipart上传文件

    1 上传单个文件 1 1定义接口 Multipart POST uploadImgs Call
  • Laravel5.6 实现小程序使用openid登陆、手机号验证码登陆、账户密码登陆三种登陆方式

    我的个人博客 逐步前行STEP 目前开发小程序 按需求要实现3种登陆方式 1 微信授权登陆 2 账户密码登陆 3 手机号 验证码登陆 我使用laravel自带的Auth认证机制 通过attempt方法进行账户验证 但是默认的认证机制必须包含
  • YOLOv6网络结构详解

    网络结构 根据官方代码使用Drawio绘制的YOLOv6 s网络结构图 官方资源 美团技术团队对于YOLOv6的介绍 文章 文章 文章 论文地址 YOLOv6 A Single Stage Object Detection Framewor
  • Java基础——大杂烩

    今天阿Q给大家来一节大杂烩 讲一下专题性不强的java基础知识 main方法详解 public static void main String args 这里面只有args能改变 public 被jvm调用 访问权限足够大 static 被