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

来源:互联网 发布:mermaid mac 编辑:程序博客网 时间:2024/06/05 09:43

------- 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就不说了。你懂得。

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

原创粉丝点击