黑马程序员-----一些杂类知识

本文介绍了Java编程中的单例设计模式、匿名函数的使用,以及面向对象编程的一些注意事项。重点讲解了饿汉式与懒汉式的单例设计模式的区别,匿名函数的创建与内存管理,同时指出了在面向对象编程中可能出现的问题及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------- android培训java培训、期待与您交流! ----------


/*以下均为本人按理解手打。仅代表个人观点,如果有错误请联系我加以改成。谢谢!无任何拷贝,摘抄等行为,转载请注明地址*/

一、单例设计模式:

class personal//饿汉式
{
	private personal()
	{

	}

	static personal p = new personal();

	public static personal getObject()
	{
		return p;
	}

}


class personal_1                       //懒汉式
{
	private personal_1()
	{

	}
	static personal_1 p = null;

	public static personal_1 getObj()
	{
		if(p==null)
			p = new personal_1();

		return p;
	}

}


class day067				//主函数体
{
	public static void main(String[] args)
	{
		personal s = personal.getObject();
		personal_1 s1 = personal_1.getObj();
	}
}

简单介绍:

        饿汉式设计模式,简单来说就是代码简单,效率高,提前创建好本类对象当主函数调用时直接返回对象。

        懒汉式,功能作用和饿汉式一样,但是区别在于内存中的创建先后顺序及安全性。懒汉式在函数调用的时候才创建对象并返回对象。而且在多核CPU中处理数据也不安全。虽然几率比较小,但是要以防万一。尽量避免使用懒汉式这种定义方式。

总结:以后尽量使用饿汉式单例设计模式。在返回对象时尽量采用这种代码紧凑的思想来编写


二、关于匿名函数

class nonameObj
{
	int number = 1;
	String str = "绿色";
	void Change(int recv)
	{
		for(int i=1;i<recv;i++)
		{
			number = i;
			System.out.print("我是匿名函数,我循环了" + i + "次!\n");
		}
		if(number%2 == 1)
				result("紫色");		//把我最爱的紫色传递过去
	}

	void result(String str)
	{
		System.out.print("我最爱的颜色是" + str + "  我可以改变成员变量的内容,所以说我不是没有丝毫用处!");
	}
}


class day054
{
	public static void main(String[] args)
	{
		new nonameObj().Change(22);
		System.out.println("-------------------------------------------");
		new nonameObj().Change(21);
	}
}

代码简单介绍:

         创建对象时通过new.类名的方式来创建对象,建立的对象只有短暂的生存期。并且执行到下一条语句,建立的对象便会被JAVA虚拟机当垃圾内存清理掉了。但是这种定义的方式,并不一定完全没有好处,也有一定的好处在一些不必要的操作中可以节省内存。。等


匿名函数总结:在一些不必要的操作中可以使用匿名函数来完成。这种方式虽然很有局限性,但是执行完便在内存中成为垃圾给JAVA虚拟机清理掉了,节省了内   存空间。所以定义的时候想好是否还需要匿名函数做其它事情。


三、this和super的简单理解

        this和super在类中的第一条语句,通常是JVM自动加上去的。一般在调用本类的成员变量、成员函数时一般省略this。除非在一些成员变量和局部变量或者全局变量,变量名称相同的时候,加上this以标示为本类成员变量。

        super是访问父类的对象。当出现A,B,C三个类。B继承A,C继承B时,在C类中使用super.类名可以访问,B继承A包含B本身中的部分成员变量。当B、A有成员变量名称一样的时候,则A中的成员变量则被复写。在C类中访问的其实就是B类中的数据。


四、命令带参数运行:

class mainDemo
{
	public static void main(String[] args)
	{
		System.out.println(args.length);
		if(args.length == 0)
		{
				System.out.println("No argments");
		}
		System.out.println(args[0]);
	}
}



class day062
{
	
	public static void main(String[] args)
	{
		String [] arr = {"heiheihei","2","3"};
		mainDemo.main(arr);
	}

}


代码简单介绍:

        因为在public static void main(String[] args)中,虚拟机会自动给主函数new一个大小。所以这里我们用。参数.length就可以获取到带来的参数多少以及分别是什么。通过这种方法,可以方便执行某些命令语句,例如执行“net uesr s s /add”,这种命令。代码过于简单,就不详细说明了。


个人总结:这种带参数运行的程序,一般是黑洞洞窗口程序,没有任何窗体设计,会给不懂电脑的人带来很多不明白的问题,也许高手都喜欢用这种方式吧!反正我是喜欢这种的。简单高效,而且运行速度快,便于重新开发、添加功能。


面向对象之注意事项1:

class fu
{
	void method1()
	{
		System.out.println("fu method1");
	}

	void method2()
	{
		System.out.println("fu method2");//2
	}
}

class zi extends fu
{
	void method1()
	{
		System.out.println("zi method1");//1
	}

	void method3()
	{
		System.out.println("zi method3");//3
	}
}

class day084
{
	public static void main(String[] args)
	{
		fu f = new zi();

		f.method1();
		f.method2();
		//f.method3();
	}
}

程序简单介绍:

     本程序在面向对象时进行测试JAVA虚拟机运行时的重写、覆盖。

      当取消最后一行注释时,编译不能通过,故先加上注释。

程序运行结论:在取消最后一行语句注释时,编译不能通过是由于父类没有method3这个函数。但是我new 的是子类并不是父类,所以先加上注释。然后编译运行出现zi method1和fu method2运行结果。所以得出结论。

用父类new子类对象编译时虚拟机会检查父类是否存在该类。没有则编译不通过。当子类创建后,子类会覆盖父类的同名函数。当然需要有权限private就不说了。你懂得。

成员型变量和非静态函数这里不做考虑在内。

内容概要:本文档详细介绍了基于MATLAB实现多目标差分进化(MODE)算法进行无人机三维路径规划的项目实例。项目旨在提升无人机在复杂三维环境中路径规划的精度、实时性、多目标协调处理能力、障碍物避让能力和路径平滑性。通过引入多目标差分进化算法,项目解决了传统路径规划算法在动态环境和多目标优化中的不足,实现了路径长度、飞行安全距离、能耗等多个目标的协调优化。文档涵盖了环境建模、路径编码、多目标优化策略、障碍物检测与避让、路径平滑处理等关键技术模块,并提供了部分MATLAB代码示例。 适合人群:具备一定编程基础,对无人机路径规划和多目标优化算法感兴趣的科研人员、工程师和研究生。 使用场景及目标:①适用于无人机在军事侦察、环境监测、灾害救援、物流运输、城市管理等领域的三维路径规划;②通过多目标差分进化算法,优化路径长度、飞行安全距离、能耗等多目标,提升无人机任务执行效率和安全性;③解决动态环境变化、实时路径调整和复杂障碍物避让等问题。 其他说明:项目采用模块化设计,便于集成不同的优化目标和动态环境因素,支持后续算法升级与功能扩展。通过系统实现和仿真实验验证,项目不仅提升了理论研究的实用价值,还为无人机智能自主飞行提供了技术基础。文档提供了详细的代码示例,有助于读者深入理解和实践该项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值