热门标签 | 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;
}
}

 

 


推荐阅读
  • 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流
    字节流抽象类InputStream和OutputStream是字节流的顶级父类所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStreamInput ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • WinMain 函数详解及示例
    本文详细介绍了 WinMain 函数的参数及其用途,并提供了一个具体的示例代码来解析 WinMain 函数的实现。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 检查在所有可能的“?”替换中,给定的二进制字符串中是否出现子字符串“10”带 1 或 0 ... [详细]
  • 2022年7月20日:关键数据与市场动态分析
    2022年7月20日,本文对当日的关键数据和市场动态进行了深入分析。主要内容包括:1. 关键数据的解读与趋势分析;2. 市场动态的变化及其对投资策略的影响;3. 相关经济指标的评估。通过这些分析,帮助读者更好地理解当前市场环境,为决策提供参考。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 2.2 组件间父子通信机制详解
    2.2 组件间父子通信机制详解 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
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社区 版权所有