java期末突击

目录

1. 快速入门

2. 类

3. 成员方法

 4. 构造器

5. 单例模式

6. 继承

7. 抽象类

8. 多线程(Thread与Runnable)


1. 快速入门

public class Hello                
{
    public static void main(String[] args)
    {
        System.out.println("Hello,World");
    }
}



1."public class Hello" 是一个公有的类,类名是Hello,类名与文件名必须保持一致
2."public static void main(String[] args)" 类似C++中的"int main()",主函数,是程序的入口,内部编写程序主体

2. 类

(1)java的类等同于C++中的结构体,先定义一个类,再用这个类去创建变量

// 定义一个猫类

class Cat
{
    String name;          // 名字
    int age;              // 年龄
    String color;         // 颜色
    String[ ] master;     // 字符串数组类型 
}



// 用这个类去创建变量

Cat cat1 = new Cat();

// new Cat() --> 创建一只猫
// Cat cat1 --> 用cat1这个变量来接收,Cat是数据类型。类比结构体创建变量

(2)类的使用

Cat cat1 = new Cat();
cat1.name = "小白";
cat1.age = 10;
cat1.color = "白色";

Cat cat2 = new Cat();
cat2.name = "小红";
cat2.age = 20;
cat2.color = "红色";

3. 成员方法

(1)相当于C++中的函数,但由于java是面向对象的语言,因此方法是在成员里面的,通过调用成员来调用方法,故称之为成员方法。

(2)方法的定义

class Person
{
    String name;
    int age;
    public void speak()
    {
        System.out.println("我是一个好人");
    }
    public void tot1()
	{
		int s=0;
		for (int i=1;i<=10;i++)
			s+=i;
		System.out.println(s);
	}
    public void tot2(int n)
	{
		int s=0;
		for (int i=1;i<=n;i++)
			s+=i;
		System.out.println(s);
	}
}

(3)方法的使用

public class Method1
{
    public static void main(String[] args)
    {
        Person p = new Person();
        p.speak();
        p.tot1();
        p.tot2(5);
    }
}

 (4)有返回值的方法

public class Method2
{
    public static void main(String[] args)
    {
        Person p = new Person();
        int ans = p.tot(10,20);
        System.out.println(ans);
    }
}

class person
{
    public int tot(int a,int b)
    {
        return a+b;
    }
}

 4. 构造器

(1) 介绍

前面在创建一个猫变量时,是先将变量创建好后再给他的姓名年龄属性赋值。使用构造器可以在创建猫这个对象时直接指定其属性。

(2)注意点

· 修饰符可以是public,protected,private

· 构造器没有返回值,也不能加"void"

· 构造器的名字需和类名一致

(3)使用

public class Construct {
	public static void main(String[] args)
	{
		Person1 p = new Person1("张三",10);
		System.out.println(p.name+" "+p.age);
	}
}

class Person1
{
	String name;
	int age;
	public Person1(String pname,int page)            // 形参列表,由主方法传入
	{
		name = pname;                                // 初始化变量的属性值
		age = page;
	}
}

5. 单例模式

一. 饿汉式(不论是否需要用到这个变量,都会去创建)

(1)步骤

· 构造器私有化。防止直接new一个对象

· 在类的内部创建对象

· 向外暴露一个静态的方法

(2)实现

public class Single {
	public static void main(String[] args)
	{
		Girlfriend gf = Girlfriend.getInstance();
		System.out.println(gf.name);
	}
}

class Girlfriend
{
    private String name;
	
	private static Girlfriend gf = new Girlfriend("小红");            // 必须加上静态"static",与下面公有化的"static"相对应
	
	private Girlfriend(String name)
	{
		this.name = name;
	}
	
	public static Girlfriend getInstance()             // 向外暴露静态
	{
		return gf;
	}
}

二. 懒汉式(需要用到这个变量时才去创建)

public class Single2 {
	public static void main(String[] args)
	{
		Girlfriend gf = Girlfriend.getInstance();
		System.out.println(gf.name);
	}
}

class Girlfriend2
{
	public String name;
	
	private static Girlfriend2 gf;                     // 声明变量名,但不去创建
	
	private Girlfriend2(String name)
	{
		this.name = name;
	}
	
	public static Girlfriend2 getInstance()
	{
		if (gf == null)                                // 多一条判断,该变量是否已经创建过
			gf = new Girlfriend2("小红");
		return gf;
	}
}

6. 继承

(1)作用

当不同类之间有大量重复的成员变量和方法时,设置一个父类,包含所有类共同的部分,所有类作为子类继承父类,已经拥有共同部分,只需再添加自己特有的部分即可。

(2)实现

class Student {                                // 父类
	public String name;
	public int age;
	private double score;
	
	public void setScore(int score)
	{
		this.score = score;
	}
	
	public void Show()
	{
		System.out.println("学生名 " + name + " 年龄 " + age + " 成绩 " + score);
	}
}

class Pupil extends Student                    // 子类1:小学生
{
	public void testing()
	{
		System.out.println("小学生 " + name + " 正在上课");
	}
}

class Gra extends Student                      // 子类2:大学生
{
	public void testing()
	{
		System.out.println("大学生 " + name + " 正在上课");
	}
}

public class Extend {
	public static void main(String[] args)
	{
		Pupil p = new Pupil();                 // 创建子类1对象
		p.name = "小红";
		p.age = 15;
		p.setScore(100);
		p.testing();
		p.Show();
		
		Gra g = new Gra();                     // 创建子类2对象
		g.name = "小花";
		g.age = 16;
		g.setScore(98);
		g.testing();
		g.Show();
	}
}

7. 抽象类

(1)介绍

当父类中的某些方法需要声明,但又不确定该如何实现时,可以将其声明为抽象方法,那么这个类也被称为抽象类。

例:类为Animal,方法为eat,但不确定是什么动物,若是猫则吃鱼,若是狗则吃骨头,无法确定,因此需要声明抽象方法。

(2)实现

一. 初始

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

class Animal
{
	private String name;
	
	public Animal(String name)
	{
		this.name = name;
	}
	
	public void eat()
	{
		System.out.println("这是一个动物,但不知道是什么动物,吃什么?");
	}
}

二. 改为抽象类

· 去掉方法体,只剩下方法声明,并加上"abstract"改为抽象方法

· 类声明前加上"abstract"改为抽象类

· 一般来说抽象类会有子类来继承,抽象掉的方法,会由子类来实现

· (细节)抽象类不能被实例化,即无法在主方法中new一个抽象类的对象

package chouxiang;

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

abstract class Animal            
{
	private String name;
	
	public Animal(String name)
	{
		this.name = name;
	}
	
	public abstract void eat();
}

(3)样例

package chouxiang;

abstract class Animal
{
	String name;
	
	public abstract void eat();
}

class Cat extends Animal
{
	public void eat()                            // 重写方法
	{
		System.out.println(name + "爱吃鱼");
	}
}

public class Abstract {
	public static void main(String[] args)
	{
		Cat p = new Cat();
		p.name = "小花";
		p.eat();
	}
}

8. 多线程(Thread与Runnable)

(1)方法

通过继承thread类(自带)来实现调用。

(2)实现

一. 继承Thread

public class Thread01 {
	public static void main(String[] args) throws InterruptedException
	{
		Cat p = new Cat();
		p.start();
		
		for (int i = 1 ; i <= 10 ; i++)
		{
			System.out.println(i);
			Thread.sleep(1000);
		}
	}
}

class Cat extends Thread
{
	public void run()
	{
		int i=1;
		while (i <= 10)
		{
			System.out.println("喵喵,我是小猫咪");
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			i++;
		}
	}
}

二. Runnable

· 什么时候用Runnable:由于java是单继承,当一个类已经继承了一个父类时,无法再继承Thread,因此只能用接口模式。

public class Thread02 {
	public static void main(String[] agrs)
	{
		Dog p1 = new Dog();
		Thread thread = new Thread(p1);
		thread.start();
	}
}

class Dog implements Runnable
{
	public void run()
	{
		for (int i = 1; i <= 10; i++)
		{
			System.out.println("第" + i + "小狗汪汪叫");
		}
	}
}

(3)为什么不是直接调用 p.run()

p.start() 是开始p线程,但主线程并不会中断,而是主线程与子线程同时开始。

p.run() 是暂停主线程,调用成员方法,等其结束后再继续主线程。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开源项目的 README.md 这样写,hr 看了都心动

大家好&#xff0c;我是南城余。 最近在搞项目的开源 README.md 时&#xff0c;看到有的大佬的 README.md 前面都会有 badge 标识和多彩的 tag 标签。都看着超级高级&#xff0c;就想着也来实践下。 今天一篇文章带着大家个性化你的 README.md。如下图片&#xff1a; 这里我先…

【Linux】进程池

大致草稿 思维导图 学习目标 一、进程池的代码编写顺序 在进程池中&#xff0c;我们要创建多个子进程&#xff0c;并且对多个子进程和父进程建立管道的关系&#xff0c;确保父进程和子进程之间可以进行相互通信。 父进程就是master&#xff0c;而子进程就是work/slaver。大致…

低代码平台如何革新客户管理

引言 在当今快节奏的商业环境中&#xff0c;企业对于客户管理的需求日益增长。同时&#xff0c;随着技术的不断发展&#xff0c;低代码开发作为一种创新的软件开发方法正在逐渐崭露头角。低代码开发为企业提供了一种更快速、更灵活的方式来构建应用程序&#xff0c;使得传统的软…

烧脑的逻辑图又来了,精力绝对不是花费在做图上。

逻辑图设计之所以比较耗费精力&#xff0c;主要是因为它需要进行深入的思考和分析&#xff0c;以确保设计的逻辑正确、完整和可行。以下是一些可能导致逻辑图设计耗费精力的原因&#xff1a; 复杂性&#xff1a;逻辑图设计通常涉及到复杂的业务流程和系统架构。设计师需要理解各…

04-树5 Root of AVL Tree(浙大数据结构PTA习题)

04-树5 Root of AVL Tree 分数 25 作者 陈越 单位 浙江大学 An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by more th…

VMware虚拟机安装Ubuntu-Server版教程(超详细)

目录 1. 下载2. 安装 VMware3. 安装 Ubuntu3.1 新建虚拟机3.2 安装操作系统 4. SSH方式连接操作系统4.1 好用的SSH工具下载&#xff1a;4.2 测试SSH连接 5. 开启root用户登录5.1 设置root用户密码5.2 传统方式切换root用户5.3 直接用root用户登录5.4 SSH启用root用户登录 6. 安…

Kali 我来了

Kali 我来了 1、官网下载2、修改密码3、开启SSH远程登录服务4、关闭kali图形化界面 1、官网下载 官方链接: https://www.kali.org/ 下载链接: https://cdimage.kali.org/kali-2024.1/kali-linux-2024.1-vmware-amd64.7z 解压后 直接导入 VmWare 就可使用可爱的小 Kali 了。 …

太阳能智能农业气象站:创新科技引领现代农业革命

TH-NQ14在科技日新月异的今天&#xff0c;现代农业正迎来一场由智能化、精准化、绿色化驱动的深刻变革。太阳能智能农业气象站作为这场变革的先锋力量&#xff0c;以其独特的优势和强大的功能&#xff0c;为现代农业的发展注入了新的活力&#xff0c;并引领着农业生产的未来趋势…

el-date-picker的使用,及解决切换type时面板样式错乱问题

这里选择器的类型可以选择日月年和时间范围&#xff0c;根据类型不同&#xff0c;el-date-picker的面板也展示不同&#xff0c;但是会出现el-date-picker错位&#xff0c;或者面板位置和层级等问题。 源代码&#xff1a; <el-selectv-model"dateType"placeholder&…

【漏洞复现】Check Point 安全网关任意文件读取漏洞(CVE-2024-24919)

0x01 产品简介 Check Point Security Gateways 是 Check Point Sofware 提供的一系列 网络安全Q解决方案。这些解决方案包括下一代防火墙(NGFW)、数据中心安全网关和 A1驱动的量子网关&#xff0c;旨在为企业提供针对复杂网络威胁的先进防护。它们通过集成的威胁防护、统的安全…

微信小程序 npm构建+vant-weaap安装

微信小程序&#xff1a;工具-npm构建 报错 解决&#xff1a; 1、新建miniprogram文件后&#xff0c;直接进入到miniprogram目录&#xff0c;再次执行下面两个命令&#xff0c;然后再构建npm成功 npm init -y npm install express&#xff08;Node js后端Express开发&#xff…

初出茅庐的小李博客之使用立创开发板(ESP32)连接到EMQX Platform【MQTT TLS/SSL 端口连接】

介绍 手上有一块立创开发板&#xff0c;本着不吃灰的原则把它用起来&#xff0c;今天就来用它来连接上自己部署的MQTT服务器进行数据通信。 硬件&#xff1a;立创开发板 开发环境&#xff1a;Arduino IDE Win11 MQTT 平台&#xff1a;EMQX Platform 立创开发板介绍&#xff1…

ChatGPT AI专题资料合集【65GB】

介绍 ChatGPT & AI专题资料合集【65GB】 &#x1f381;【七七云享】资源仓库&#xff0c;海量资源&#xff0c;无偿分享√

OSError: [Errno 117] Structure needs cleaning

一 问题描述 OSError: [Errno 117] Structure needs cleaning: /tmp/pymp-wafeatri 我重新使用SSH登录也会提示这个类似问题 二 解决方法 2.1 尝试删除报错的文件 &#xff08;想直接看最终解决方法的可忽略此处&#xff09; sudo rm -rf /tmp/pymp-wafeatri 此种方法只能保证…

手机怎么投屏?值得收藏的5个投屏软件(2024全新)

在大屏幕上观看自己喜欢的电影、电视节目和其他媒体节目总是一种很棒的体验。因此&#xff0c;如果你正在寻找通过无线网络或USB数据线在windows或mac电脑或笔记本电脑上屏幕镜像、投屏到电脑显示屏上的指南&#xff0c;那么可以花3分钟时间往下看看。在本文中&#xff0c;小编…

现在,所有人都能免费用GPT-4o了!

OpenAI今日官宣&#xff0c;ChatGPT正式向所有用户免费开放&#xff01;所有用户均可以访问定制化GPT、分析图表、询问有关照片的问题以及5月初GPT-4o添加的其他功能。 OpenAI今天在X上发布推文&#xff1a; 「所有ChatGPT免费用户现在都可以使用浏览、视觉、数据分析、文件上…

CSS+Canvas绘制最美星空(一闪一闪亮晶晶效果+流星划过)

1.效果 2.代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><style>body,html {margin: 0;padding: 0;ov…

tree2retriever:面向RAG场景的递归摘要树检索器实现

tree2retriever 面向RAG场景的递归摘要树检索器实现 Recursive Abstractive Processing for Tree-Organized Retrieval Github:https://github.com/yanqiangmiffy/tree2retriever Example import logging import picklefrom tree2retriever.cluster_tree_builder import Clus…

整理GTX收发器示例工程(高速收发器十一)

前文分析了xilinx官方提供的GTX IP示例工程&#xff0c;该代码的结构比较混乱&#xff0c;本文将该代码进行梳理&#xff0c;形成一个便于使用的模块&#xff0c;后续如果要使用多通道的收发器&#xff0c;多次例化某个模块就行了。 下图是官方例程中GTX IP相关模块的RTL视图&a…

Redis用GEO实现附近的人功能

文章目录 ☃️概述☃️命令演示☃️API将数据库表中的数据导入到redis中去☃️实现附近功能 ☃️概述 GEO就是Geolocation的简写形式&#xff0c;代表地理坐标。Redis在3.2版本中加入了对GEO的支持&#xff0c;允许存储地理坐标信息&#xff0c;帮助我们根据经纬度来检索数据。…