山东青岛安卓培训就业中心 专业Android软件工程师培训,手机软件开发人才就业实训中心0532-85025005

程序员吐槽大全

 

槽点:不懂技术

一个不懂电脑的人,长期对我说,加这个功能,我认为挺简单的,我就说,那你做,他说,我要会还用你,我说,你不会就没资格说简单!老板总认为今天提的需求明天就能实现,不就是晚上加会儿班么。

 

槽点:无穷尽需求变化

需求变动真是深恶痛绝,尤其是涉及业务逻辑上的更改,牵一发而动全身啊,每改一次,全部系统都要过一遍,改的次数越多,BUG的风险越大。不是我不愿意改,很多时候都是用户在朝三暮四折腾而已,答应一次,就会有两次,三次。千万不能让用户形成随意更改需求的习惯,不然一个项目很可能滴滴答答永远做不完。所以我对用户要进行需求更改的时候,要求特别严格,一定要写正式文档说清楚为什么原需求不适应,为什么要改新需求,具体界面、逻辑更改内容是什么。过程一麻烦大部分心血来潮的需求变动就可以过滤掉了,想口头几句话就改系统,我是一定会”忘记”的╮(╯_╰)╭

Tags:

发布: 青软于老师 分类: 未分类 评论: 0 浏览: 11

Java的clone方法

 什么是"clone"? 

  在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能 会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说,A与B是两个独立的对象,但B的初始值是由A对象确定的。在 Java语言中,用简单的赋值语句是不能满足这种需求的。要满足这种需求虽然有很多途径,但实现clone()方法是其中最简单,也是最高效的手段。 

   Java的所有类都默认继承java.lang.Object类,在java.lang.Object类中有一个方法clone()。JDK API的说明文档解释这个方法将返回Object对象的一个拷贝。要说明的有两点:一是拷贝对象返回的是一个新对象,而不是一个引用。二是拷贝对象与用 new操作符返回的新对象的区别就是这个拷贝已经包含了一些原来对象的信息,而不是对象的初始信息。 

  怎样应用clone()方法? 

  一个很典型的调用clone()代码如下: 

Tags:

发布: 青软于老师 分类: 未分类 评论: 0 浏览: 16

Java 反射机制分析指南

 

一、JAVA是动态语言吗?

一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,JAVA和C++一样,都不是动态语言。

但JAVA它却有着一个非常突出的动态相关机制:反射。通过反射,Java可以于运行时加载、探知和使用编译期间完全求和的类、生成其对象实体,调用其方法或者对属性设值。所以Java算是一个半动态的语言吧。

反射的概念:

在Java中的反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;

Tags:

发布: 青软于老师 分类: 未分类 评论: 0 浏览: 7

Java虚拟机底层结构详解

 从今天开始,我将和大家一起来学习一下java虚拟机的内容。从底层开一下java的运行机制。

Tags:

发布: 青软于老师 分类: 未分类 评论: 0 浏览: 14

Java虚拟机的垃圾回收机制

    Java语言从出现到现在,一直占据编程语言前列,他很大的一个原因就是由于java应用程序所运行的平台有关。我们大家都知道java应用程序运行在java虚拟机上。这样就大大减少了java应用程序和底层操作系统打交道的频率。这也就为java程序的跨平台提供了良好的基础。在java虚拟机中为我们提供了一个很重要的机制就是java虚拟机的自动的内存管理机制。也就是我们平时所说的垃圾回收机制,这使得开发人员不用自己来管理应用中的内存。C/C++开发人员需要通过malloc/free 和new/delete等函数来显式的分配和释放内存。这对开发人员提出了比较高的要求,容易造成内存访问错误和内存泄露等问题。今天我们就一起来看一下java虚拟机给我们提供的这个强大的功能——自动垃圾回收机制。

Tags:

发布: 青软于老师 分类: 未分类 评论: 0 浏览: 9

认识Java数组

   一、什么是数组

       数组?什么是数组?在我印象中的数组是应该这样的:通过new关键字创建并组装他们,通过使用整形索引值访问它的元素,并且它的尺寸是不可变的!

Tags:

发布: 青软于老师 分类: 未分类 评论: 0 浏览: 12

Java提高篇-----字符串

 

可以证明,字符串操作是计算机程序设计中最常见的行为。

      一、String

      首先我们要明确,String并不是基本数据类型,而是一个对象,并且是不可变的对象。查看源码就会发现String类为final型的(当然也不可被继承),而且通过查看JDK文档会发现几乎每一个修改String对象的操作,实际上都是创建了一个全新的String对象。

Tags:

发布: 青软于老师 分类: 未分类 评论: 0 浏览: 7

给Java程序猿们推荐一些值得一看的好书

 学习的最好途径就是看书

"学习的最好途径就是看书",这是我自己学习并且小有了一定的积累之后的第一体会。个人认为看书有两点好处:

Tags:

发布: 青软于老师 分类: 未分类 评论: 0 浏览: 11

Java中vector的使用详解

 

Vector 可实现自动增长的对象数组。 

java.util.vector提供了向量类(vector)以实现类似动态数组的功能。在Java语言中没有指针的概念,但如果正确灵活地使用指针又确实可以大大提高程序的质量。比如在c,c++中所谓的“动态数组”一般都由指针来实现。为了弥补这个缺点,Java提供了丰富的类库来方便编程者使用,vector类便是其中之一。事实上,灵活使用数组也可以完成向量类的功能,但向量类中提供大量的方法大大方便了用户的使用。 
    创建了一个向量类的对象后,可以往其中随意插入不同类的对象,即不需顾及类型也不需预先选定向量的容量,并可以方便地进行查找。对于预先不知或者不愿预先定义数组大小,并且需要频繁地进行查找,插入,删除工作的情况。可以考虑使用向量类。 

向量类提供了三种构造方法: 
public vector() 
public vector(int initialcapacity,int capacityIncrement) 
public vector(int initialcapacity) 

使用第一种方法系统会自动对向量进行管理,若使用后两种方法。则系统将根据参数,initialcapacity设定向量对象的容量(即向量对象可存储数据的大小),当真正存放的数据个数超过容量时。系统会扩充向量对象存储容量。 

参数capacityincrement给定了每次扩充的扩充值。当capacityincrement为0的时候,则没次扩充一倍,利用这个功能可以优化存储。在Vector类中提供了各种方法方便用户的使用: 

插入功能: 
(1)public final synchronized void adddElement(Object obj) 
将obj插入向量的尾部。obj可以是任何类型的对象。对同一个向量对象,亦可以在其中插入不同类的对象。但插入的应是对象而不是数值,所以插入数值时要注意将数组转换成相应的对象。 
例如:要插入整数1时,不要直接调用v1.addElement(1),正确的方法为: 
Vector v1 = new Vector(); 
Integer integer1 = new Integer(1); 
v1.addElement(integer1); 
(2)public final synchronized void setElementAt(Object obj,int index) 
将index处的对象设置成obj,原来的对象将被覆盖。 
(3)public final synchronized void insertElement(Object obj,int index) 
在index指定的位置插入obj,原来对象以及此后的对象依次往后顺延。 

删除功能: 
(1)public final synchronized void removeElement(Object obj) 
从向量中删除obj,若有多个存在,则从向量头开始试,删除找到的第一个与obj相同的向量成员。 
(2)public final synchronized void removeAllElement(); 
删除向量所有的对象 
(3)public fianl synchronized void removeElementAt(int index) 
删除index所指的地方的对象 

查询搜索功能: 
(1)public final int indexOf(Object obj) 
从向量头开始搜索obj,返回所遇到的第一个obj对应的下标,若不存在此obj,返回-1. 
(2)public final synchronized int indexOf(Object obj,int index) 
从index所表示的下标处开始搜索obj. 
(3)public final int lastindexOf(Object obj) 
从向量尾部开始逆向搜索obj. 
(4)public final synchornized int lastIndex(Object obj,int index) 
从index所表示的下标处由尾至头逆向搜索obj. 
(5)public final synchornized firstElement() 
获取向量对象中的首个obj 
(6)public final synchornized Object lastElement() 
获取向量对象的最后一个obj 

例子:VectorApp.Java

Tags:

发布: 青软于老师 分类: 未分类 评论: 0 浏览: 12

JAVA基础之理解JNI原理

 JNI是JAVA标准平台中的一个重要功能,它弥补了JAVA的与平台无关这一重大优点的不足,在JAVA实现跨平台的同时,也能与其它语言(如C、C++)的动态库进行交互,给其它语言发挥优势的机会。

有了JAVA标准平台的支持,使JNI模式更加易于实现和使用。在此总结了下面这个知识图:
实例:
环境说明:ubuntu 10.4.2 LTS系统
程序清单1:src/com/magc/jni/HelloWorld.java
复制代码
 1/** 2 *  3*/ 4package com.magc.jni; 5 6/** 7 * @author magc 8 * 9*/10publicclass HelloWorld {1112static {1314        System.loadLibrary("Hello");1516    }1718publicnativevoid DisplayHello();19/**20     * @param args21*/22publicstaticvoid main(String[] args) {2324new HelloWorld().DisplayHello();25    }2627}
复制代码
 进入src目录下,编译该JAVA类,
命令:javac ./com/magc/jni/HelloWorld.java
在该HelloWorld.java所在目录下生成HelloWorld.class
然后使用javah生成头文件,
命令:javah -jni com.magc.jni.HelloWorld
在当前目录下生成com_magc_jni_HelloWorld.h头文件,此文件供C、C++程序来引用并实现其中的函数
程序清单2:com_magc_jni_HelloWorld.h
复制代码
 1/* DO NOT EDIT THIS FILE - it is machine generated */ 2#include <jni.h> 3/* Header for class com_magc_jni_HelloWorld */ 4 5#ifndef _Included_com_magc_jni_HelloWorld 6#define _Included_com_magc_jni_HelloWorld 7#ifdef __cplusplus 8extern"C" { 9#endif10/*11 * Class:     com_magc_jni_HelloWorld12 * Method:    DisplayHello13 * Signature: ()V14*/15JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello16  (JNIEnv *, jobject);1718#ifdef __cplusplus19}20#endif21#endif
复制代码
注:1)、此头文件是不需要用户编译的,直接供其它C、C++程序引用。
     2)、此头文件中的Java_com_magc_jni_HelloWorld_DisplayHello(JNIEnv *, jobject)方法,是将来与动态链接库交互的接口,并需要名字保持一致。
 程序清单3:src/jni_helloworldImpl.cpp
复制代码
#include <jni.h>#include "com_magc_jni_HelloWorld.h"#include <stdio.h>JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello(JNIEnv *env, jobject obj){    printf("From jni_helloworldImpl.cpp :");    printf("Hello world ! \n");    return;}
复制代码
此C++文件实现了上述头文件中的函数,注意方法函数名要保持一致。
编译生成动态库libHello.so,
命令:g++ -shared -I /usr/lib/jvm/java-6-openjdk/include jni_helloworldImpl.cpp -o libHello.so
成功后,便会在当前目录下生成动态链接库libHello.so文件。
有了具体实现的动态库后,就可以运行JAVA调用JNI程序类的native方法了,
命令:java -Djava.library.path=. com.magc.jni.HelloWorld

输入结果即为:From jni_helloworldImpl.cpp :Hello world ! 

Tags:

发布: 青软于老师 分类: 未分类 评论: 0 浏览: 16