老张Java加强

简介: 1.javaw是java的图形虚拟机,结束其便可结束Eclipse,不过我没在taskmgr发现有。2.必须设置断点后才可以debug,否则debug后无法查看变量也无法下一步,此时选择变量才可以右键watch。

1.javaw是java的图形虚拟机,结束其便可结束Eclipse,不过我没在taskmgr发现有。
2.必须设置断点后才可以debug,否则debug后无法查看变量也无法下一步,此时选择变量才可以右键watch。
3.高版本的java可以运行低版本的javac,相反就不行了。
4.选择工程点右键preference下的javacompiler必须和window下的preference里的javaJDK一个版本。
5.也就是说具体某工程的配置和工作台的配置可以不一样,这就是继承与覆盖。
6.配置模板:window --perferences--java--editor--Template;通过右键surround with调用;也是要先选择代码,或者alt+shift+z。
比如定义了sysout代替System.out.println()且光标定位在括号里,那么输入sysout并按alt+?即可,不是在surround with里找。
7.jdk里可以静态导入(import static),导入一个类里的所有静态方法(import导入所有类),那么使用的时候便不必加上类名。
8.被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写;不能通过访问权限、返回类型、抛出的异常进行重载;对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。
子类方法不能缩小父类方法的访问权限;子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
9.增强型for循环:for(type 变量名 : 集合变量名),迭代变量必须在for内定义,集合变量是数组或者实现了iterator接口的集合类。

10.享元模式

 1 public class Test {
 2     /*
 3      * 享元模式(flyweight):很多小的对象有许多相同的属性,
 4      * 则把他们看成一个对象,不同的属性通过不同的函数参数实现(26个字符)
 5      */
 6     public static void main(String[] args) {
 7         
 8         //s和d若是在-128到127那么打印true(用的频率高),否则false;同样适用于Integer.valueOf()
 9         Integer s = 134;//自动打包
10         Integer d = 134;
11         System.out.println(s==d);
12         
13     }
14 }

11.普通类实现枚举

  一定要是对象,枚举类型的每个对象都可以调用getClass和getName等。

 1 public class Week {
 2     private Week(){
 3         
 4     }
 5     /*
 6      * 为了节省时间只写了这两个
 7      */
 8     public static final Week sun = new Week();
 9     public static final Week mon = new Week();
10     
11     public Week nextDay() {
12         if(this==sun) {
13             return mon;
14         }else {
15             return sun;
16         }
17     }
18     
19     public String toString() {
20         return this==sun?"Sunday":"Monday";
21     }
22     
23 }
1 //调用的时候使用
2 Week w = Week.mon;

12.枚举类型也是后来才加入的,原来以为用不到;这就像我们的学习过程,不同的阶段对知识的需求不同。
13.抽象类中可以有非抽象方法,比如toString,子类实现该类的时候可以不重写该方法,看下面的例子。

  采用内部类把本来需要在nextDay写很多代码转移到了各个子类里。

 1 public abstract class Week {
 2     private Week(){
 3         
 4     }
 5     
 6     //由于是abstract不可以直接new对象,但是可以经由子类,此处采用内部类
 7     public static final Week sun = new Week() {
 8 
 9         @Override
10         public Week nextDay() {
11             // TODO Auto-generated method stub
12             return mon;
13         }
14         
15         
16     };//必须加分号
17     
18     public static final Week mon = new Week() {
19 
20         @Override
21         public Week nextDay() {
22             // TODO Auto-generated method stub
23             return sun;
24         }
25         
26     };
27     
28     public abstract Week nextDay();//必须加上abstract,否则总提示需要返回值
29     
30     //抽象类中可以有非抽象方法,子类实现该类的时候可以不重写该方法
31     public String toString() {
32         return this==sun?"Sunday":"Monday";
33     }
34     
35 }
 1 public class Test {
 2     public static void main(String[] args) {
 3         
 4         Week w = Week.mon;
 5         
 6         System.out.println(w);//Monday
 7         System.out.println(w.nextDay());//Sunday
 8         
 9         System.out.println("------ok--------");
10     }
11 }
12 /*下面的编译出错,因为Week的构造方法是private的,在类外不能new,这就是单例模式
13 class MyWeek extends Week {
14 
15     @Override
16     public Week nextDay() {
17         // TODO Auto-generated method stub
18         return Week.mon;
19     }
20     
21 }
22 */

14.enum

 1 /*
 2  * 枚举类型(java1.5才有):Java.lang.Enum,
 3  * 例子:假设一个宝箱只能由两个人开启;
 4  * 只能取特定值中的一个,也就是只可以取特定值之一。
 5  * 和C/.C++的枚举类型不同的是必须使用枚举类型名点访问某一值,
 6  * 类似静态变量,C/.C++中是下标从0开始可以分别指定表示什么。
 7  * 写游戏时物体只可以朝四个方向运动当然可以使用int类型1、2、3、4,
 8  * 但是下面写时谁知道会不会写成5,编译时难以发现错误,
 9  * 但是使用枚举类型就可以发现错误。
10  */
11 public class TestEnum {
12     //MyColor是一种类型,所以首字母大写,定义的颜色很像静态变量,因为可以用类型名点访问
13     public enum MyColor {
14         red, green, blue
15     };
16     
17     public static void main(String[] args) {
18         MyColor m = MyColor.red;//定义的颜色很像静态变量
19         switch(m) {
20             case red:
21                 System.out.println("red");
22                 break;
23             case green:
24                 System.out.println("green");
25                 break;
26             case blue:
27                 System.out.println("blue");
28                 break;
29             default:
30                 System.out.println("没有该颜色!");
31         }
32         System.out.println(m);//打印red,说明已经重写了toString()方法
33         System.out.println(m.name());
34         System.out.println(m.ordinal());//返回编号
35         System.out.println(MyColor.valueOf("red").toString());//从浏览器得到的是字符串,一定会用到该方法
36         System.out.println(MyColor.values().length);//先转为数组
37     }
38 
39 }

15.枚举类型使用构造方法

 1 public class TestEnum {////枚举类型的构造方法必须写在元素下,且必须是private
 2     //MyColor是一种类型,所以首字母大写,定义的颜色很像静态变量,因为可以用类型名点访问
 3     public enum MyColor {
 4         red(1), green(), blue;
 5         
 6         private MyColor() {
 7             System.out.println("first");
 8         }
 9         
10         private MyColor(int day) {
11             System.out.println("second");
12             
13         }
14             
15     };
16     
17     public static void main(String[] args) {
18         MyColor m = MyColor.red;//定义的颜色很像静态变量
19         System.out.println(m);//打印red,说明已经重写了toString()方法
20         System.out.println(m.name());
21         System.out.println(m.ordinal());//返回编号
22         System.out.println(MyColor.valueOf("red").toString());//从浏览器得到的是字符串,一定会用到该方法
23         System.out.println(MyColor.values().length);//先转为数组
24     }
25 
26 }
27 //由结果看出,元素生成的时候自动调用的是无参数的构造方法,在元素后加上参数就调用有参的,只加一对括号还是无参
28 /*
29  * second
30 first
31 first
32 red
33 red
34 0
35 red
36 3
37 */

16.外部类的修饰符为public或者默认;内部类和方法是平级的,可以有四个访问控制符;声明数组要int[] array不要int array[],前一种一看就知道是一种类型。

17.在java中main方法也可以重载,也就是说在一个源程序里只有一个main是错误的;在不同的类里可以有相同的public static void main(String args),主类是public类。  

 1 public class TestMain{    
 2     public static void main(String args[]){        
 3         
 4         System.out.println("这是真正的主方法");        
 5         main("Hello World!");    
 6     }    
 7     public static void main(String str){        
 8         
 9         System.out.println(str);    
10     }
11 }
12 //源文件的名字:TestMain.java编译通过,执行结果:D:\MyPro>javac TestMain.javaD:\MyPro>java TestMain这是真正的主方法Hello World!

18.反射的作用:实现框架功能。

19.hashCode

View Code
 1 package b;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collection;
 5 import java.util.HashSet;
 6 
 7 public class Reflect {
 8 
 9     public static void main(String[] args) {
10         // TODO Auto-generated method stub
11         /*
12          * new ArrayList()的话不论是否重写hashCode和equals都输出5;
13          * new HashSet()重写前是4,后是3
14          */
15         //Collection coll = new ArrayList();
16         Collection coll = new HashSet();
17         Pointer p1 = new Pointer(1, 1);
18         Pointer p2 = new Pointer(1, 1);
19         Pointer p3 = new Pointer(3, 3);
20         Pointer p4 = new Pointer(4, 4);
21         
22         coll.add(p1);
23         coll.add(p2);
24         coll.add(p3);
25         coll.add(p4);
26         coll.add(p4);
27         
28         /*
29          * 参与hashCode运算的值,在加载后就不应该再改动,否则删除的话是删不掉的(不会报错),这就是内存泄露
30          */
31         System.out.println(coll.size());
32         
33     }
34 
35 }
36 
37 class Pointer {
38     public int x = 0;
39     public int y = 0;
40     
41     public Pointer(int x, int y) {
42         super();
43         this.x = x;
44         this.y = y;
45     }
46 
47     @Override
48     public int hashCode() {
49         final int prime = 31;
50         int result = 1;
51         result = prime * result + x;
52         result = prime * result + y;
53         return result;
54     }
55 
56     @Override
57     public boolean equals(Object obj) {
58         if (this == obj)
59             return true;
60         if (obj == null)
61             return false;
62         if (getClass() != obj.getClass())
63             return false;
64         Pointer other = (Pointer) obj;
65         if (x != other.x)
66             return false;
67         if (y != other.y)
68             return false;
69         return true;
70     }
71     
72     
73 }

20.

 

目录
相关文章
|
5月前
|
人工智能 监控 安全
MCP与企业数据集成:ERP、CRM、数据仓库的统一接入
作为一名深耕企业级系统集成领域多年的技术博主"摘星",我深刻认识到现代企业面临的数据孤岛问题日益严重。随着企业数字化转型的深入推进,各类业务系统如ERP(Enterprise Resource Planning,企业资源规划)、CRM(Customer Relationship Management,客户关系管理)、数据仓库等系统的数据互联互通需求愈发迫切。传统的点对点集成方式不仅开发成本高昂,维护复杂度也呈指数级增长,更重要的是难以满足实时性和一致性要求。Anthropic推出的MCP(Model Context Protocol,模型上下文协议)为这一痛点提供了革命性的解决方案。MCP通过
368 0
陌陌无限注册一键新机,陌陌无限注册活号技术,主要就是看这个插件技术
本项目基于Xposed框架实现陌陌APP的设备信息伪装,避免多账号注册被封号。通过主Hook类、机型伪装逻辑、系统属性拦截器和Xposed入口文件
|
10月前
|
算法 测试技术 Swift
Kimi开源Moonlight-16B-A3B:基于Muon优化器的高效大模型,性能与训练效率双突破!
Kimi开源Moonlight-16B-A3B:基于Muon优化器的高效大模型,性能与训练效率双突破!
362 5
|
10月前
|
机器学习/深度学习 人工智能 数据可视化
《解锁AI黑科技:数据分类聚类与可视化》
在数字化时代,数据海量增长,如何提取有价值信息成为关键挑战。AI技术崛起,特别是数据分类与聚类及可视化技术,正成为各行业核心力量。数据分类如邮件过滤,聚类如水果分拣。常用算法包括决策树、神经网络、SVM和K-Means等。数据可视化通过图表、热力图等形式直观展示数据,助力商业决策、科研分析等。AI技术的不断进步,将使数据分析更加智能高效。
206 4
|
调度 开发者
核心概念解析:进程与线程的对比分析
在操作系统和计算机编程领域,进程和线程是两个基本而核心的概念。它们是程序执行和资源管理的基础,但它们之间存在显著的差异。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
464 4
|
达摩院 算法 图形学
达摩院视觉算法黑科技之透明抠图
透明抠图问题作为抠图问题的一种,其采用的方法和模型构建与通常的模型有所不同,透明抠图需要将环境光,折射率的影响纳入计算,而一般的折射光图又很难获得,因此透明抠图的模型在过去一直难以建立,或者说很难达到令人满意的效果,达摩院视觉算法团队通过双分支解码器(Object Mask获取,Opacity预测),颜色纠正模块,对图像实现高精度透明抠图。
达摩院视觉算法黑科技之透明抠图
|
分布式计算 搜索推荐 Hadoop
|
存储 自然语言处理 前端开发
初探 Watermill 构建 Golang 事件驱动程序,SSE 进行 HTTP 服务器推送
初探 Watermill 构建 Golang 事件驱动程序,SSE 进行 HTTP 服务器推送
1197 0
初探 Watermill 构建 Golang 事件驱动程序,SSE 进行 HTTP 服务器推送
|
网络协议 网络架构
TP-LINK路由器如何设置DHCP
TP-LINK路由器如何设置DHCP
2845 0
TP-LINK路由器如何设置DHCP
|
Go
《我修复的印象最深的一个bug》--etcd 客户端的使用姿势
《我修复的印象最深的一个bug》--etcd 客户端的使用姿势
1078 0
《我修复的印象最深的一个bug》--etcd 客户端的使用姿势