首页编程java编程java generator是什么,Java项目的maven是做什么的

java generator是什么,Java项目的maven是做什么的

编程之家2023-10-1198次浏览

大家好,今天小编来为大家解答以下的问题,关于java generator是什么,Java项目的maven是做什么的这个很多人还不知道,现在让我们一起来看看吧!

java generator是什么,Java项目的maven是做什么的

java问题

-------------参考下------------------

JAVA加密算法的实现用例

对象

java generator是什么,Java项目的maven是做什么的

参数 algorithm如:"DSA"

public final void initSign(PrivateKey privateKey)

throws InvalidKeyException

java generator是什么,Java项目的maven是做什么的

用指定的私钥初始化

参数:privateKey所进行签名时用的私钥

public final void update(byte data)

throws SignatureException

public final void update(byte[] data)

throws SignatureException

public final void update(byte[] data, int off, int len)

throws SignatureException

添加要签名的信息

public final byte[] sign()

throws SignatureException

返回签名的数组,前提是initSign和update

public final void initVerify(PublicKey publicKey)

throws InvalidKeyException

用指定的公钥初始化

参数:publicKey验证时用的公钥

public final boolean verify(byte[] signature)

throws SignatureException

验证签名是否有效,前提是已经initVerify初始化

参数: signature签名数组

*/

import java.security.*;

import java.security.spec.*;

public class testdsa{

public static void main(String[] args) throws java.security.NoSuchAlgorithmException,java.lang.Exception{

testdsa my=new testdsa();

my.run();

}

public void run()

{

//数字签名生成密钥

//第一步生成密钥对,如果已经生成过,本过程就可以跳过,对用户来讲myprikey.dat要保存在本地

//而mypubkey.dat给发布给其它用户

if((new java.io.File("myprikey.dat")).exists()==false){

if(generatekey()==false){

System.out.println("生成密钥对败");

return;

};

}

//第二步,此用户

//从文件中读入私钥,对一个字符串进行签名后保存在一个文件(myinfo.dat)中

//并且再把myinfo.dat发送出去

//为了方便数字签名也放进了myifno.dat文件中,当然也可分别发送

try{

java.io.ObjectInputStream in=new java.io.ObjectInputStream(new java.io.FileInputStream("myprikey.dat"));

PrivateKey myprikey=(PrivateKey)in.readObject();

in.close();

// java.security.spec.X509EncodedKeySpec pubX509=new java.security.spec.X509EncodedKeySpec(bX509);

//java.security.spec.X509EncodedKeySpec pubkeyEncode=java.security.spec.X509EncodedKeySpec

String myinfo="这是我的信息";//要签名的信息

//用私钥对信息生成数字签名

java.security.Signature signet=java.security.Signature.getInstance("DSA");

signet.initSign(myprikey);

signet.update(myinfo.getBytes());

byte[] signed=signet.sign();//对信息的数字签名

System.out.println("signed(签名内容)="+byte2hex(signed));

//把信息和数字签名保存在一个文件中

java.io.ObjectOutputStream out=new java.io.ObjectOutputStream(new java.io.FileOutputStream("myinfo.dat"));

out.writeObject(myinfo);

out.writeObject(signed);

out.close();

System.out.println("签名并生成文件成功");

}

catch(java.lang.Exception e){

e.printStackTrace();

System.out.println("签名并生成文件失败");

};

//第三步

//其他人通过公共方式得到此户的公钥和文件

//其他人用此户的公钥,对文件进行检查,如果成功说明是此用户发布的信息.

//

try{

java.io.ObjectInputStream in=new java.io.ObjectInputStream(new java.io.FileInputStream("mypubkey.dat"));

PublicKey pubkey=(PublicKey)in.readObject();

in.close();

System.out.println(pubkey.getFormat());

in=new java.io.ObjectInputStream(new java.io.FileInputStream("myinfo.dat"));

String info=(String)in.readObject();

byte[] signed=(byte[])in.readObject();

in.close();

java.security.Signature signetcheck=java.security.Signature.getInstance("DSA");

signetcheck.initVerify(pubkey);

signetcheck.update(info.getBytes());

if(signetcheck.verify(signed)){

System.out.println("info="+info);

System.out.println("签名正常");

}

else System.out.println("非签名正常");

}

catch( java.lang.Exception e){e.printStackTrace();};

}

//生成一对文件myprikey.dat和mypubkey.dat---私钥和公钥,

//公钥要用户发送(文件,网络等方法)给其它用户,私钥保存在本地

public boolean generatekey()

{

try{

java.security.KeyPairGenerator keygen=java.security.KeyPairGenerator.getInstance("DSA");

// SecureRandom secrand=new SecureRandom();

// secrand.setSeed("tttt".getBytes());//初始化随机产生器

// keygen.initialize(576,secrand);//初始化密钥生成器

keygen.initialize(512);

KeyPair keys=keygen.genKeyPair();

// KeyPair keys=keygen.generateKeyPair();//生成密钥组

PublicKey pubkey=keys.getPublic();

PrivateKey prikey=keys.getPrivate();

java.io.ObjectOutputStream out=new java.io.ObjectOutputStream(new java.io.FileOutputStream("myprikey.dat"));

out.writeObject(prikey);

out.close();

System.out.println("写入对象 prikeys ok");

out=new java.io.ObjectOutputStream(new java.io.FileOutputStream("mypubkey.dat"));

out.writeObject(pubkey);

out.close();

System.out.println("写入对象 pubkeys ok");

System.out.println("生成密钥对成功");

return true;

}

catch(java.lang.Exception e){

e.printStackTrace();

System.out.println("生成密钥对失败");

return false;

};

}

public String byte2hex(byte[] b)

{

String hs="";

String stmp="";

for(int n=0;n<b.length;n++)

{

stmp=(java.lang.Integer.toHexString(b[n]& 0XFF));

if(stmp.length()==1) hs=hs+"0"+stmp;

else hs=hs+stmp;

if(n<b.length-1) hs=hs+":";

}

return hs.toUpperCase();

}

}

2.4. DESede/DES对称算法

首先生成密钥,并保存(这里并没的保存的代码,可参考DSA中的方法)

KeyGenerator keygen= KeyGenerator.getInstance(Algorithm);

SecretKey deskey= keygen.generateKey();

用密钥加密明文(myinfo),生成密文(cipherByte)

Cipher c1= Cipher.getInstance(Algorithm);

c1.init(Cipher.ENCRYPT_MODE,deskey);

byte[] cipherByte=c1.doFinal(myinfo.getBytes());

传送密文和密钥,本文没有相应代码可参考DSA

.............

用密钥解密密文

c1= Cipher.getInstance(Algorithm);

c1.init(Cipher.DECRYPT_MODE,deskey);

byte[] clearByte= c1.doFinal(cipherByte);

相对来说对称密钥的使用是很简单的,对于JCE来讲支技DES,DESede,Blowfish三种加密术

对于密钥的保存各传送可使用对象流或者用二进制编码,相关参考代码如下

SecretKey deskey= keygen.generateKey();

byte[] desEncode=deskey.getEncoded();

javax.crypto.spec.SecretKeySpec destmp=new javax.crypto.spec.SecretKeySpec(desEncode,Algorithm);

SecretKey mydeskey=destmp;

相关API

KeyGenerator在DSA中已经说明,在添加JCE后在instance进可以如下参数

DES,DESede,Blowfish,HmacMD5,HmacSHA1

javax.crypto.Cipher加/解密器

public static final Cipher getInstance(java.lang.String transformation)

throws java.security.NoSuchAlgorithmException,

NoSuchPaddingException

返回一个指定方法的Cipher对象

参数:transformation方法名(可用 DES,DESede,Blowfish)

public final void init(int opmode, java.security.Key key)

throws java.security.InvalidKeyException

用指定的密钥和模式初始化Cipher对象

参数:opmode方式(ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE,UNWRAP_MODE)

key密钥

public final byte[] doFinal(byte[] input)

throws java.lang.IllegalStateException,

IllegalBlockSizeException,

BadPaddingException

对input内的串,进行编码处理,返回处理后二进制串,是返回解密文还是加解文由init时的opmode决定

注意:本方法的执行前如果有update,是对updat和本次input全部处理,否则是本inout的内容

/*

安全程序 DESede/DES测试

*/

import java.security.*;

import javax.crypto.*;

public class testdes{

public static void main(String[] args){

testdes my=new testdes();

my.run();

}

public void run(){

//添加新安全算法,如果用JCE就要把它添加进去

Security.addProvider(new com.sun.crypto.provider.SunJCE());

String Algorithm="DES";//定义加密算法,可用 DES,DESede,Blowfish

String myinfo="要加密的信息";

try{

//生成密钥

KeyGenerator keygen= KeyGenerator.getInstance(Algorithm);

SecretKey deskey= keygen.generateKey();

//加密

System.out.println("加密前的二进串:"+byte2hex( myinfo.getBytes()));

System.out.println("加密前的信息:"+myinfo);

Cipher c1= Cipher.getInstance(Algorithm);

c1.init(Cipher.ENCRYPT_MODE,deskey);

byte[] cipherByte=c1.doFinal(myinfo.getBytes());

System.out.println("加密后的二进串:"+byte2hex(cipherByte));

//解密

c1= Cipher.getInstance(Algorithm);

c1.init(Cipher.DECRYPT_MODE,deskey);

byte[] clearByte=c1.doFinal(cipherByte);

System.out.println("解密后的二进串:"+byte2hex(clearByte));

System.out.println("解密后的信息:"+(new String(clearByte)));

}

catch(java.security.NoSuchAlgorithmException e1){e1.printStackTrace();}

catch(javax.crypto.NoSuchPaddingException e2){e2.printStackTrace();}

catch(java.lang.Exception e3){e3.printStackTrace();}

}

public String byte2hex(byte[] b)//二行制转字符串

{

String hs="";

String stmp="";

for(int n=0;n<b.length;n++)

{

stmp=(java.lang.Integer.toHexString(b[n]& 0XFF));

if(stmp.length()==1) hs=hs+"0"+stmp;

else hs=hs+stmp;

if(n<b.length-1) hs=hs+":";

}

return hs.toUpperCase();

}

}

2.5. Diffie-Hellman密钥一致协议

公开密钥密码体制的奠基人Diffie和Hellman所提出的"指数密钥一致协议"(Exponential Key Agreement Protocol),该协议不要求别的安全性先决条件,允许两名用户在公开媒体上交换信息以生成"一致"的,可以共享的密钥。在JCE的中实现用户alice生成DH类型的密钥对,如果长度用1024生成的时间请,推荐第一次生成后保存 DHParameterSpec,以便下次使用直接初始化.使其速度加快

System.out.println("ALICE:产生 DH对...");

KeyPairGenerator aliceKpairGen= KeyPairGenerator.getInstance("DH");

aliceKpairGen.initialize(512);

KeyPair aliceKpair= aliceKpairGen.generateKeyPair();

alice生成公钥发送组bob

byte[] alicePubKeyEnc= aliceKpair.getPublic().getEncoded();

bob从alice发送来的公钥中读出DH密钥对的初始参数生成bob的DH密钥对

注意这一步一定要做,要保证每个用户用相同的初始参数生成的

DHParameterSpec dhParamSpec=((DHPublicKey)alicePubKey).getParams();

KeyPairGenerator bobKpairGen= KeyPairGenerator.getInstance("DH");

bobKpairGen.initialize(dhParamSpec);

KeyPair bobKpair= bobKpairGen.generateKeyPair();

bob根据alice的公钥生成本地的DES密钥

KeyAgreement bobKeyAgree= KeyAgreement.getInstance("DH");

bobKeyAgree.init(bobKpair.getPrivate());

bobKeyAgree.doPhase(alicePubKey, true);

SecretKey bobDesKey= bobKeyAgree.generateSecret("DES");

bob已经生成了他的DES密钥,他现把他的公钥发给alice,

byte[] bobPubKeyEnc= bobKpair.getPublic().getEncoded();

alice根据bob的公钥生成本地的DES密钥

,,,,,,解码

KeyAgreement aliceKeyAgree= KeyAgreement.getInstance("DH");

aliceKeyAgree.init(aliceKpair.getPrivate());

aliceKeyAgree.doPhase(bobPubKey, true);

SecretKey aliceDesKey= aliceKeyAgree.generateSecret("DES");

bob和alice能过这个过程就生成了相同的DES密钥,在这种基础就可进行安全能信

常用API

java.security.KeyPairGenerator密钥生成器类

public static KeyPairGenerator getInstance(String algorithm)

throws NoSuchAlgorithmException

以指定的算法返回一个KeyPairGenerator对象

参数: algorithm算法名.如:原来是DSA,现在添加了 DiffieHellman(DH)

public void initialize(int keysize)

以指定的长度初始化KeyPairGenerator对象,如果没有初始化系统以1024长度默认设置

参数:keysize算法位长.其范围必须在 512到 1024之间,且必须为 64的倍数

注意:如果用1024生长的时间很长,最好生成一次后就保存,下次就不用生成了

public void initialize(AlgorithmParameterSpec params)

throws InvalidAlgorithmParameterException

以指定参数初始化

javax.crypto.interfaces.DHPublicKey

public DHParameterSpec getParams()

返回

java.security.KeyFactory

public static KeyFactory getInstance(String algorithm)

throws NoSuchAlgorithmException

以指定的算法返回一个KeyFactory

参数: algorithm算法名:DSH,DH

public final PublicKey generatePublic(KeySpec keySpec)

throws InvalidKeySpecException

根据指定的key说明,返回一个PublicKey对象

java.security.spec.X509EncodedKeySpec

public X509EncodedKeySpec(byte[] encodedKey)

根据指定的二进制编码的字串生成一个key的说明

参数:encodedKey二进制编码的字串(一般能过PublicKey.getEncoded()生成)

javax.crypto.KeyAgreement密码一至类

public static final KeyAgreement getInstance(java.lang.String algorithm)

throws java.security.NoSuchAlgorithmException

返回一个指定算法的KeyAgreement对象

参数:algorithm算法名,现在只能是DiffieHellman(DH)

public final void init(java.security.Key key)

throws java.security.InvalidKeyException

用指定的私钥初始化

参数:key一个私钥

public final java.security.Key doPhase(java.security.Key key,

boolean lastPhase)

throws java.security.InvalidKeyException,

java.lang.IllegalStateException

用指定的公钥进行定位,lastPhase确定这是否是最后一个公钥,对于两个用户的

情况下就可以多次定次,最后确定

参数:key公钥

lastPhase是否最后公钥

public final SecretKey generateSecret(java.lang.String algorithm)

throws java.lang.IllegalStateException,

java.security.NoSuchAlgorithmException,

java.security.InvalidKeyException

根据指定的算法生成密钥

参数:algorithm加密算法(可用 DES,DESede,Blowfish)

*/

import java.io.*;

import java.math.BigInteger;

import java.security.*;

import java.security.spec.*;

import java.security.interfaces.*;

import javax.crypto.*;

import javax.crypto.spec.*;

import javax.crypto.interfaces.*;

import com.sun.crypto.provider.SunJCE;

public class testDHKey{

public static void main(String argv[]){

try{

testDHKey my= new testDHKey();

my.run();

} catch(Exception e){

System.err.println(e);

}

}

private void run() throws Exception{

Security.addProvider(new com.sun.crypto.provider.SunJCE());

System.out.println("ALICE:产生 DH对...");

KeyPairGenerator aliceKpairGen= KeyPairGenerator.getInstance("DH");

aliceKpairGen.initialize(512);

KeyPair aliceKpair= aliceKpairGen.generateKeyPair();//生成时间长

//张三(Alice)生成公共密钥 alicePubKeyEnc并发送给李四(Bob),

//比如用文件方式,socket.....

byte[] alicePubKeyEnc= aliceKpair.getPublic().getEncoded();

//bob接收到alice的编码后的公钥,将其解码

KeyFactory bobKeyFac= KeyFactory.getInstance("DH");

X509EncodedKeySpec x509KeySpec= new X509EncodedKeySpec(alicePubKeyEnc);

PublicKey alicePubKey= bobKeyFac.generatePublic(x509KeySpec);

System.out.println("alice公钥bob解码成功");

// bob必须用相同的参数初始化的他的DH KEY对,所以要从Alice发给他的公开密钥,

//中读出参数,再用这个参数初始化他的 DH key对

//从alicePubKye中取alice初始化时用的参数

DHParameterSpec dhParamSpec=((DHPublicKey)alicePubKey).getParams();

KeyPairGenerator bobKpairGen= KeyPairGenerator.getInstance("DH");

bobKpairGen.initialize(dhParamSpec);

KeyPair bobKpair= bobKpairGen.generateKeyPair();

System.out.println("BOB:生成 DH key对成功");

KeyAgreement bobKeyAgree= KeyAgreement.getInstance("DH");

bobKeyAgree.init(bobKpair.getPrivate());

System.out.println("BOB:初始化本地key成功");

//李四(bob)生成本地的密钥 bobDesKey

bobKeyAgree.doPhase(alicePubKey, true);

SecretKey bobDesKey= bobKeyAgree.generateSecret("DES");

System.out.println("BOB:用alice的公钥定位本地key,生成本地DES密钥成功");

// Bob生成公共密钥 bobPubKeyEnc并发送给Alice,

//比如用文件方式,socket.....,使其生成本地密钥

byte[] bobPubKeyEnc= bobKpair.getPublic().getEncoded();

System.out.println("BOB向ALICE发送公钥");

// alice接收到 bobPubKeyEnc后生成bobPubKey

//再进行定位,使aliceKeyAgree定位在bobPubKey

KeyFactory aliceKeyFac= KeyFactory.getInstance("DH");

x509KeySpec= new X509EncodedKeySpec(bobPubKeyEnc);

PublicKey bobPubKey= aliceKeyFac.generatePublic(x509KeySpec);

System.out.println("ALICE接收BOB公钥并解码成功");

;

KeyAgreement aliceKeyAgree= KeyAgreement.getInstance("DH");

aliceKeyAgree.init(aliceKpair.getPrivate());

System.out.println("ALICE:初始化本地key成功");

aliceKeyAgree.doPhase(bobPubKey, true);

//张三(alice)生成本地的密钥 aliceDesKey

SecretKey aliceDesKey= aliceKeyAgree.generateSecret("DES");

System.out.println("ALICE:用bob的公钥定位本地key,并生成本地DES密钥");

if(aliceDesKey.equals(bobDesKey)) System.out.println("张三和李四的密钥相同");

//现在张三和李四的本地的deskey是相同的所以,完全可以进行发送加密,接收后解密,达到

//安全通道的的目的

/*

* bob用bobDesKey密钥加密信息

*/

Cipher bobCipher= Cipher.getInstance("DES");

bobCipher.init(Cipher.ENCRYPT_MODE, bobDesKey);

String bobinfo="这是李四的机密信息";

System.out.println("李四加密前原文:"+bobinfo);

byte[] cleartext=bobinfo.getBytes();

byte[] ciphertext= bobCipher.doFinal(cleartext);

/*

* alice用aliceDesKey密钥解密

*/

Cipher aliceCipher= Cipher.getInstance("DES");

aliceCipher.init(Cipher.DECRYPT_MODE, aliceDesKey);

byte[] recovered= aliceCipher.doFinal(ciphertext);

System.out.println("alice解密bob的信息:"+(new String(recovered)));

if(!java.util.Arrays.equals(cleartext, recovered))

throw new Exception("解密后与原文信息不同");

System.out.println("解密后相同");

}

}

关于java的基本概念的小问题1

还有两天,由于时间关系,尽量帮你答哈,呵呵你也太小气了吧,5分不如不给呵呵开个玩笑

1.不存在的,基本单位:类

2.一般是从main()方法开始的

3.构造函数在类创建对像时无条件调用,而一般方法则要要对像去才可以调用,当然static方法直接用类名也可以调用

4.print()或println()两个方法,如System.out.println();

5.和你主类名必需完全相同,注意大小写,也就是public类的类名

6.javac文件名.java

7.是.class文件

8.java文件名(没有.java)

9.

public class HelloWorld{

public static void main(String]

args){

System.out.println("Helloworld");

}

}

第二部分:

1.标识符就是用户自己启的名字,有类名,方法名,变量名,要求:1.区分大小写,2.不能以数字开头3.不能要关键字

顺便说一哈在java中还有一个不成文的约定那就是:类名可以用若干个单词组合起来,第个单词的第一个字母要大小,变量名一般用小写,方法名的第一个字母用小写,常量名全用大写,可用下划线___分开

2.

有六个:byte(1) short(2) int(4) long(8) float(4) double(8)括号里表示其占的字节数

3.类和方法的前面不加关键字,编译器会给它一个默认的关键字default或friendly表示在同一个包在可以访问它.

4.不是很清,不过你可以用StringBuffer类的append()方法追加

5.这两个都是一个位移运算符,都表示右移一位,不同的是">>"若被移动的数为正数,则最左填为0,否则填为1,而">>>"不管正数负数最左为0,(请注意:这都是在二进制的情况下进行的,了解一下就行了,用得不多)

6.

public class Max{

static int max=0,min=0;

static void swap(int a,int b,int c){

max=a>b?a:b;

max=max>c?max:c;

min=a<b?a:b;

min=c<min?c:min;

System.out.println(a+""+b+""+c+"这三个数的最大值是:"+max);

System.out.println("最小的数是:"+min);

}

public static void main(String[] args){

swap(-1,0,1);//你可以在这里改变它的参数,比较别的数

}

}

7.

public class Factorial{

public static void main(String[] args){

int factorial=10;

for(int i=factorial-1;i>0;i--){

factorial=factorial*i;

}

System.out.println("10!="+factorial);

}

}

8.

public class EatPeach

{

public static void main(String[] args)

{

int n=1;

for(int i=10;i>0;i--)

{

System.out.println("第"+i+"天吃了"+n+"个桃子");

n=(n+1)*2;

}

}

}

第三部分:

1.类就是整个java程序执行的模块,由成员变量和成员方法(也叫函数)组成

2.修饰符你说的是关键字吧:

public(共用访问符,无能什么地方都可以访问),

private只能同一个包可以访问

protected允许子类继承并修改

static静态存偖区,在程序执行完后才释放内存

final常量,不能改改的量

主要的就是这几个,当然你的题议还有int double long boolean float等等这些你应该知道的就不用说了

3.类的构造函数将会在创建类的对像的第一时间得到调用,而普通方法要用对像才能调用,(当然如果是static方法的话也可以用类然直接调用)

4.Math类和Random类

5.

public(共用访问符,无能什么地方都可以访问),

private只能同一个包可以访问

protected允许子类继承并修改

final用在类的前面不能继承它

6.静太成员一般是在程序执行完后才释放内存,反之则是在当前方法完毕就释放,而main就是这个性质来的,要加static

7.抽像类是不能完成某个具体的动作的,也就是一个接口,(注意只要有一个抽像方法在内的类必定定义为抽像类)

非抽像类刚刚相反

8.抽像方法没有方法体,如abstract void f();非抽像方法有方法体如void f(){}

9..(最终类,最终方法,最终属性就是在类,方法和变量的前加final)

含义就是:当放在类前,降低了此类的访问权限,重要的是别的类不能继承它

当放在方法前:表示这个方法不可以修改,更不得覆盖它

当放到变量前:也就是我们讲的常量,你一定晓得是不变的量,这我就不用多说了

10.

class Employee{

private String name;

private int salary,hireDay;

Employee(String name,int salary,int hireDay){

this.name=name;

this.salary=salary;

this.hireDay=hireDay;

}

public String getName(){

return name;

}

public int getSalary(){

return salary;

}

public int getHireDay(){

return hireDay;

}

}

//注:你说的三个私有方法用一个构造器完成要简单一些,如果你一定要那么做,只要把三个参数改成//三个方法就可以了

//11.

public class EmployeeTest{

public static void main(String[] args){

Employee[] e={

new Employee("小明",800,10),

new Employee("小强",600,15),

new Employee("小华",900,12)

};

System.out.println("name"+" salary"+" hireDay");

for(int i=0;i<e.length;i++)

System.out.println(e[i].getName()+""+e[i].getSalary()+

""+e[i].getHireDay());

}

}

注意你要先编译第一个,第二个才能运行

第四部分:

1.这个题不是很好,意思不够明确,这里我说两种吧多态和覆盖都是继承.当然接口也可以继承,所以我说这个题出得不好!

2.当我们使用关键字extends时就表示一个类继承了另一个类,也就是子类和父类,对于方法来说有下面三种:

(1).方法继承,在子类中不需定义就拥有的父类在的方法

(2).方法的覆盖:是指返回的类型,形式参数和方法名都相同,改变其方法体.

(3).方法的重载:则是方法名相同,形式参数不同的几个方法,如:洗车,洗衣服,有一个是相同的,就是洗这个属性(方法名),不同的是车,衣服(参数),所以我们不必这样说(用洗车的方法来洗车,用洗衣服的方法来洗衣服)就能分开洗车是做什么和洗衣服是做什么,正是如此编译器是通过这种方式来识别调用哪个方法的

(4.abstract class Employee{

abstract int getSalary();

}

class CommonEmployee extends Employee{

private int salary;

CommonEmployee(int salary){

this.salary=salary;

}

public int getSalary(){

return salary;

}

}

class Manager extends Employee{

private int salary;

Manager(int salary){

this.salary=salary;

}

public int getSalary(){

return salary;

}

}

public class SimpleTest1{

public static void main(String[] args){

Employee com=new CommonEmployee(1200);

Employee man=new Manager(2000);

System.out.println("职工的工次是:"+com.getSalary());

System.out.println("经理的工资是:"+man.getSalary());

}

}

5.java的多态性是指:许多类它们有一个共同的特点,我们如果每个特征我们都去写的话会用很多的代码也很麻烦,那么解决这一问题的正是多态性,

那如何解决呢??我们可以把这些相同的特点写成一个接口或抽像类,然后只要有这个特征的类继承它就可以了,其中有一个很经典的例子:画图,我们可以创建一个图形的抽像类,因为三角形啊,正方形啊,都是图形,于是可以继承这个类,于是我们可以用这些图形来继承上面所创建的图形类,如果你不是很理解的话我把这个例子写到下面你仔细看就会明白的:

import java.util.*;

class Shape{

void draw(){}

void erase(){}

}

class Circle extends Shape{

void draw(){

System.out.println("Circle.draw()");

}

void erase(){

System.out.println("Circle.erase");

}

}

class Square extends Shape{

void draw(){

System.out.println("Square.draw()");

}

void erase(){

System.out.println("Square.erase()");

}

}

class Triangle extends Shape{

void draw(){

System.out.println("Triangle.draw()");

}

void erase(){

System.out.println("Triangle.erase()");

}

}

//和以上是组合的关系

class RandomShapeGenerator{

private Random rand=new Random();

public Shape next(){//反回一个对像

switch(rand.nextInt(3)){

default:

case 0:return new Circle();

case 1:return new Square();

case 2:return new Triangle();

}

}

}

public class Shapes{

private static RandomShapeGenerator gen=

new RandomShapeGenerator();

public static void main(String[] args){

Shape[] s=new Shape[9];

for(int i=0;i<s.length;i++)

s[i]=gen.next();//给引用填对像

for(int i=0;i<s.length;i++)

s[i].draw();//能过动态帮定调用哪一个方法

}

}

如果还是看不会的话,那么请你打开书好好看抽像类,然后再看看接口,你不会看不懂的,去试试!!!!

6.this和super有一个最易理解的就是this表示当前对像,super表示可以引用父类中的构造函数,

当然它们的功能远远不止这些!这我就不多说了

7.

如果把子类的对像转化为父类中的对像,我们称为向上转型,一般这个好实现也很重要,用得也多,可以创建一个子类对像,然后传给父类的引用,这种说法我不知道科不科学,也很不好理解,但事实就是如此,如上面的图形例子中:

Shape next={ new Circle(),

new Square(),

new Triangle()

};

这看起来每个类的对像都给了同一个父类(Shape),这有一个问题它们表示同一对像吗?你看以把它们看成同一引用,然后事不是你想的这样,next[1].draw(),next[1].draw(),next[2].draw()它们调的并不是同一个方法,而分别调用的是Circle Square Triangle的中的draw()方法,你可以亲自运行上面的事例就知道了,好了有点说得多了,如果有问题的话加我QQ吧460566995

8.默认构造函数是指在我们没有构造函数时编译器自动帮我们加上一个构造函数一般为:类(){},它没有任何参数,也没有方法体

好了,我手都写软了,就给你答这么多吧,还有没有答完的希望后者能补上谢谢,我这两天也没有时间了,

如果没有人答你又一定要要的话可以加我的QQ问我好了,好好看里面有我的QQ的

Java项目的maven是做什么的

maven是一个项目构建和管理的工具,提供了帮助管理构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。

maven的好处在于可以将项目过程规范化、自动化、高效化以及强大的可扩展性。利用maven自身及其插件还可以获得代码检查报告、单元测试覆盖率、实现持续集成等等。

下面将进行简要介绍:

1.安装

Maven是一个Java工具,所以你必须安装Java环境。首先,下载Maven并解压到你选择的安装目录,例如在windows下的C:\maven,或者Linux下的/usr/local/maven。然后添加系统变量$M2_HOME和M2_HOME/bin到你的系统路径。在终端或者命令提示里输入以下指令:

mvn--version

这应该打印你安装的Maven的版本,例如:

Maven version: 2.0.10

Java version: 1.6.0_12

OS name:"windows xp" version:"5.1" arch:"x86" Family:"windows"

2下载所需插件

然后,在终端或者命令提示里输入以下指令:

mvn

这时,系统会下载maven运行所需的.jar文件到自动生成的默认路径为

C:\Documents and Settings\Administrator\.m2\repository的文件夹中。

这个过程大概需要十几分钟。

3创建一个项目

在你的命令行执行以下指令:

mvn archetype:create-DgroupId=com.mycompany.app-DartifactId=my-app

你将注意到此命令在当前目录创建了一个名为my-app的目录。

src/main/java目录包含项目源代码,src/test/java目录包含测试代码,而pom.xml为项目的Project Object Model,或者POM。

4配置eclipse的classpath

eclipse需要知道Maven的本地仓库的路径。所以,类路径变量M2_REPO必须设置。在eclipse内定义一个新的classpath变量:从菜单条,选择Window>Preferences,选择java>Build Path>Classpath>Variables中添加名为MAVEN_REPO的变量,指向C:\Documents and Settings\Administrator\.m2\repository。如果想让eclipse支持直接运行maven的goal,可以安装mavenide插件。

5如果你有一个单模块的简单java项目,使用eclipse将十分简单。为了从你的POM产生eclipse项目文件,执行以下命令:

cd my-app

mvn eclipse:eclipse

如果你已经使用eclipse创建或者检出了项目,你只需在workspace中刷新项目。否则,你必须将项目导入eclipse工作空间(从菜单条选择File>Import>Existing Projects into Workspace)。

好了,关于java generator是什么和Java项目的maven是做什么的的问题到这里结束啦,希望可以解决您的问题哈!

java需要什么基础课程 学习Java需要哪些基础java工作主要做什么的?java主要是做什么的