热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

这是我在四天内听完陈老师讲的java基础加强后的总结

一、MyEclipse中的一些常用的快捷键:ctrl+shift+x大写ctrl+shift+y小写alt+内容提示写住方法的时候可以先写main然后按alt+就可以了ctrl+1

一、   MyEclipse中的一些常用的快捷键:

ctrl+shift+x 大写

ctrl+shift+y 小写

alt+/ 内容提示

写住方法的时候可以先写main然后按alt+/就可以了

  ctrl+1  快速修复

  ctrl+shift+O  导包

  格式化代码块:ctrl + shift + F

  向前向后:Alt + 方向键

  向前向后复制  ctrl+alt + 方向键

  添加多行注释 Ctrl+Shift+/

除去多行注释 Ctrl+Shift+/

ctrl+shift +T  查看源码

查看所有快捷键的 快捷键:ctrl+shift+L

二、   项目的调试:

项目的开发过程中经常会遇到一些BUG,所以我们会用一种方式去调试BUG,那就是断点调试;

断点调试可以跟踪程序方便用户观察最终方便的将错误找到从而来进行调错;

在进行调试的准备就是要添加断点,用鼠标双击左边的行符就可以添加断点,然后通过debug as来运行程序,

F5 :是跳入程序执行;F6:是跳过程序执行;  F7:是跳出程序执行;

三、   装箱与拆箱:

       箱是把引用类型转换成类型;

     装箱是把类型转换成引用类型

原因是有时某些方法的参数要求使用引用类型,而你想把类型的变量通过这个参数传入,就需要使用这个操作。

相关实例:

Integer i = 1000;//装箱

int c =  i;//拆箱

//典型的应用案例

           List list = new ArrayList();

           list.add(12);//装箱

           int temp = (Integer)list.get(0);//拆箱

          

四、   数据类型:

1、基本数据类型

               整型   byte short int long

               浮点型:float double

               字符型:char

               布尔型:boolean  true false

 

           自动类型转换:

                  byte short int longfloat double

                  char

           强制类型转换:

这一般就很简单了,在这里就不想说了。

    

                     

2、引用数据类型

                 

                 接口

                 数组

 

   封装类:

               byte   Byte

               short  Short

               int    Integer

               long   Long

               float  Float

               double Double

               char  Character

               boolean  Boolean

五、   迭代器的使用:

for循环的新特性,只能用于数组、集合、实现Iterable接口的集合;

Integer arr[] = {100,100,18,90,89};

      

       //jdk1.4之前

       for (int i = 0; i

             System.out.print("   "+arr[i]);

       }

      

       //jdk1.5for增强版

       for(int i:arr){

             System.out.print("   "+i);

            

       }

注:数组中没有length()这个方法,但是数组中有length这个属性。用来表示数组的长度。

      String中有length()这个方法。用来得到字符串的长度。

 

//实现了Iterator接口的集合

       List list = Arrays.asList("12","12","abc","cd");

            

 

       for (int i = 0; i

             String temp = (String)list.get(i);

             System.out.print("   "+ temp);

       }

      

       //采用迭代器输出

       Iterator it = list.iterator();

       while(it.hasNext()){

       String tem= (String)it.next();

       System.out.print(tem+"   " );

       }

      

      

       //jdk 1.5

       for(Object obj:list){

             String str = (String)obj;

             System.out.print("  "+str);

       }

      

 

//map集合

       Map map = new HashMap();

       map.put(1, "aa"); //key  value

       map.put(2, "aac");

       map.put(3, "aacc");

       map.put(4, "aa4");

注:map.put(1, "aat"); //key 不能够重复

      

       //1、迭代map集合的值

       Set set = map.keySet(); //key装到set

       Iterator it = set.iterator(); //返回set的迭代

器装的key

       while(it.hasNext()){

             Integer key = (Integer)it.next();

             String value = (String)map.get(key);

             System.out.println(key+"  "+value);

       }

      

      

       //2、迭代map集合的值

       Set entry =  map.entrySet();  //Set

>

      

       it = entry.iterator(); //返回set的迭代器

Map.entry

      

       while(it.hasNext()){ //迭代

             Map.Entry entity = (Entry) it.next();

//实体Map.entry的对象取出

             Integer key = (Integer)entity.getKey

(); //调用实体对象的getKey()获取key的值

             String value = (String)

entity.getValue(); //调用实体对象的getValue()获取value的值

            

             System.out.println(key+"  "+value);

            

六、   枚举类的声明与使用:

//简单枚举声明:

enum Grade{

A,B,C,D;

   //A  相当于  public static Grade A = new Grade();

   private Grade(){

        

   }

}

//使用:

System.out.println(Grade.name()); //返回名称

System.out.println(Grade.ordinal());//返回序列

System.out.println(Grade.values().length); //返回数组并计算长度

Grade allentities[] =    Grade.values(); //返回一个Grade的数组

         for(Grade entity:allentities){

              System.out.println(entity);

         }

        

         Grade ss = Grade.valueOf(Grade.class, "A");

      System.out.println(ss.ordinal());

七、   另一种方式定义枚举:

class Grade{

  private Grade(){

      

  }

  public static Grade A = new Grade();

  public static Grade B = new Grade();

  public static Grade C = new Grade();

  public static Grade D = new Grade();

 

}

 

八、   Java中反射机制的使用:

Java类反射中所必须的类:
      Java
的类反射所需要的类并不多,它们分别是:FieldConstructorMethodClassObject,下面我将对这些类做一个简单的说明。
Field
类:提供有关类或接口的属性的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)属性或实例属性,简单的理解可以把它看成一个封装反射类的属性的类。
Constructor
类:提供关于类的单个构造方法的信息以及对它的访问权限。这个类和Field类不同,Field类封装了反射类的属性,而Constructor类则封装了反射类的构造方法。
Method
类:提供关于类或接口上单独某个方法的信息。所反映的方法可能是类方法或实例方法(包括抽象方法)。 这个类不难理解,它是用来封装反射类方法的一个类。
Class
类:类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。
Object
类:每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。

 

下面是反射应用的具体案例:

 

先我们来写一个类:
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
class A extends Object implements ActionListener{
private int a = 3;
public Integer b = new Integer(4);
public A(){}
public A(int id,String name){}
public int abc(int id,String name){return 0;}
public void actionPerformed(ActionEvent e){}
}
你可能被我这个类弄糊涂了,你看不出我要做什么,那就不要看这个类了,这个类是用来测试的,你知道知道它继承了Object类,有一个接口是ActionListener,两个属性intInteger,两个构造方法和两个方法,这就足够了。
下面我们把A这个类作为一个反射类,来过去A类中的一些信息,首先我们先来过去一下反射类中的属性和属性值。
import java.lang.reflect.*;
class B{
public static void main(String args[]){
A r = new A();
Class temp = r.getClass();
try{
         System.out.println("
反射类中所有公有的属性");
                         Field[] fb  =temp.getFields();
for(int j=0;jClass cl = fb[j].getType();
System.out.println("fb:"+cl);
}

                        System.out.println("
反射类中所有的属性");
Field[] fa = temp.getDeclaredFields();
                        for(int j=0;jClass cl = fa[j].getType();
System.out.println("fa:"+cl);
}
                           System.out.println("
反射类中私有属性的值");
Field f = temp.getDeclaredField("a");
f.setAccessible(true);
Integer i = (Integer)f.get(r);
System.out.println(i);
}catch(Exception e){
e.printStackTrace();
}
}

}
这里用到了两个方法,getFields()getDeclaredFields(),它们分别是用来获取反射类中所有公有属性和反射类中所有的属性的方法。另外还有getField(String)getDeclaredField(String)方法都是用来过去反射类中指定的属性的方法,要注意的是getField方法只能取到反射类中公有的属性,而getDeclaredField方法都能取到。
这里还用到了Field 类的setAccessible方法,它是用来设置是否有权限访问反射类中的私有属性的,只有设置为true时才可以访问,默认为false。另外Field类还有set(Object AttributeName,Object value)方法,可以改变指定属性的值。

下面我们来看一下如何获取反射类中的构造方法
import java.lang.reflect.*;
public class SampleConstructor {
public static void main(String[] args) {
A r = new A();
printConstructors(r);
}

public static void printConstructors(A r) {
Class c = r.getClass();
//
获取指定类的类名
String className = c.getName();
try {
//
获取指定类的构造方法
Constructor[] theCOnstructors= c.getConstructors();
for(int i=0; i//
获取指定构造方法的参数的集合
Class[] parameterTypes = theConstructors[i].getParameterTypes();

System.out.print(className + "(");

for(int j=0; jSystem.out.print(parameterTypes[j].getName() + " ");

System.out.println(")");

}
}catch(Exception e) {
e.printStackTrace();
}
}
}
这个例子很简单,只是用getConstructors()方法获取了反射类的构造方法的集合,并用Constructor类的getParameterTypes()获取该构造方法的参数。

下面我们再来获取一下反射类的父类(超类)和接口
import java.io.*;
import java.lang.reflect.*;

public class SampleInterface {
public static void main(String[] args) throws Exception {
A raf = new A();
printInterfaceNames(raf);
}

public static void printInterfaceNames(Object o) {
Class c = o.getClass();
//
获取反射类的接口
Class[] theInterfaces = c.getInterfaces();
for(int i=0; iSystem.out.println(theInterfaces[i].getName());
//
获取反射类的父类(超类)
Class theSuperclass = c.getSuperclass();
System.out.println(theSuperclass.getName());
}
}
这个例子也很简单,只是用Class类的getInterfaces()方法获取反射类的所有接口,由于接口可以有多个,所以它返回一个Class数组。用getSuperclass()方法来获取反射类的父类(超类),由于一个类只能继承自一个类,所以它返回一个Class对象。

下面我们来获取一下反射类的方法
import java.lang.reflect.*;
public class SampleMethod {

public static void main(String[] args) {
A p = new A();
printMethods(p);
}

public static void printMethods(Object o) {
Class c = o.getClass();
String className = c.getName();
Method[] m = c.getMethods();
for(int i=0; i//
输出方法的返回类型
System.out.print(m[i].getReturnType().getName());
//
输出方法名
System.out.print(" "+m[i].getName()+"(");
//
获取方法的参数
Class[] parameterTypes = m[i].getParameterTypes();
for(int j=0; jSystem.out.print(parameterTypes[j].getName());
if(parameterTypes.length>j+1){
System.out.print(",");
}
}

System.out.println(")");
}

}

}
这个例子并不难,它只是获得了反射类的所有方法,包括继承自它父类的方法。然后获取方法的返回类型、方法名和方法参数。

接下来让我们回过头来想一想,我们获取了反射类的属性、构造方法、父类、接口和方法,可这些东西能帮我们做些什么呢!!
下面我写一个比较完整的小例子,来说明Java的反射类能做些什么吧!!
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class LoadMethod {
public Object Load(String cName,String MethodName,String[] type,String[] param){
Object retobj = null;
try {
        //
加载指定的Java
            Class cls = Class.forName(cName);
           
            //
获取指定对象的实例
            Constructor ct = cls.getConstructor(null);
            Object obj = ct.newInstance(null);
           
            //
构建方法参数的数据类型
            Class partypes[] = this.getMethodClass(type);
           
            //
在指定类中获取指定的方法
            Method meth = cls.getMethod(MethodName, partypes);
           
            //
构建方法的参数值
            Object arglist[] = this.getMethodObject(type,param);

            //
调用指定的方法并获取返回值为Object类型
            retobj= meth.invoke(obj, arglist);

        }
        catch (Throwable e) {
            System.err.println(e);
        }
return retobj;
}

//
获取参数类型Class[]的方法
public Class[] getMethodClass(String[] type){
Class[] cs = new Class[type.length];
for (int i = 0; i if(!type[i].trim().equals("")||type[i]!=null){
if(type[i].equals("int")||type[i].equals("Integer")){
cs[i]=Integer.TYPE;
}else if(type[i].equals("float")||type[i].equals("Float")){
cs[i]=Float.TYPE;
}else if(type[i].equals("double")||type[i].equals("Double")){
cs[i]=Double.TYPE;
}else if(type[i].equals("boolean")||type[i].equals("Boolean")){
cs[i]=Boolean.TYPE;
}else{
cs[i]=String.class;
}
}
}
return cs;
}

//
获取参数Object[]的方法
public Object[] getMethodObject(String[] type,String[] param){
Object[] obj = new Object[param.length];
for (int i = 0; i if(!param[i].trim().equals("")||param[i]!=null){
if(type[i].equals("int")||type[i].equals("Integer")){
obj[i]= new Integer(param[i]);
}else if(type[i].equals("float")||type[i].equals("Float")){
obj[i]= new Float(param[i]);
}else if(type[i].equals("double")||type[i].equals("Double")){
obj[i]= new Double(param[i]);
}else if(type[i].equals("boolean")||type[i].equals("Boolean")){
obj[i]=new Boolean(param[i]);
}else{
obj[i] = param[i];
}
}
}
return obj;
}
}

 

 


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了 GWT 中 PopupPanel 类的 onKeyDownPreview 方法,提供了多个代码示例及应用场景,帮助开发者更好地理解和使用该方法。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • Java 类成员初始化顺序与数组创建
    本文探讨了Java中类成员的初始化顺序、静态引入、可变参数以及finalize方法的应用。通过具体的代码示例,详细解释了这些概念及其在实际编程中的使用。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文详细介绍了如何正确安装Java EE SDK,并解决在安装过程中可能遇到的问题,特别是关于servlet代码在Apache Tomcat 10中无法运行的情况。 ... [详细]
author-avatar
小宋提刑官_783
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有