[三]java作业

一.关键字的含义与举列

1.native

含义:Java平台有用户和本地C代码进行互操作的API,称为Java Native Interface (Java本地接口)。

举例:用 Java 调用 C 的 "helloworld"

a.创建一个Java类

public class Helloworld
{
    static
    {
        System.loadLibrary("Helloworld");
    }
     
    public static native void Hello();
     
    @SuppressWarnings("static-access")
    public static void main(String[] args)
    {
        new Helloworld().Hello();
    }
}
b.运行javah,得到包含该方法的C声明头文件.h

c.根据头文件,写C实现本地方法。

#include "Helloworld.h"
#include <stdio.h>
 
JNIEXPORT void JNICALL Java_Helloworld_Hello
{
    printf("Hello,JNI");   
}
d.生成dll共享库,然后Java程序load库,调用即可。

2.strictfp

含义:使浮点运算在不同的硬件平台所执行的结果一致

举例:使用 strictfp 修饰类

 public strictfp class teststrictfp
{
	public static void main(String[] args)
	{
		float a = 0.6710339f;
		double b = 0.04150553411984792d;
		double c = a + b;
		System.out.println("float :" + a);
		System.out.println("double:" + b);
		System.out.println("sum   :" + c);
	}
}
输出
float :0.6710339
double:0.04150553411984792
sum   :0.71253945297742238

3.Volatile

含义:在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。

举例:

一个线程不停的调用方法one(),一个线程不停的调用方法two()

class Test {   
    static volatile int i = 0, j = 0;   
    static void one() { i++; j++; }   
    static void two() {   
        System.out.println("i=" + i + " j=" + j);   
    }   
} 
不加volatil修饰, 偶尔会出现j大于i的情况

4.Synchroize

含义:用于进行线程间的同步

举例:

public class Test 
{
	public static void main(String[]args)
	{
		final Object object=new Object();
		
		new Thread()
		{
			public void run()
			{
				int i=0 ;
				while(++i<=10)
				{
					synchronized(object)
					{
						System.out.println("同步");
						System.out.println("代码块");
					}
				}
			}
		}.start();
		
		new Thread()
		{
			public void run()
			{
				int i=0 ;
				while(++i<=10)
				{
					synchronized(object)
					{
						System.out.println("synchronized");
						System.out.println("code");
					}
				}
			}
		}.start();
	}
}

二.简单类型与引用类型的默认值

简单类型:0
引用类型:NULL

三.值传递.引用传递.副本传递的区别

值传递:
传递值的数据类型:八种基本数据类型和String。
引用传递:
传递地址值的数据类型,除String以外的所有复合数据类型,包括数组、类和接口。
副本传递:
如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值
如果参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。

四.快速排序

public class QuickSort
{
	public static void quickSort(int[] array)
	{
		if(array != null){
			quickSort(array, 0, array.length-1);
		}
	}
	
	private static void quickSort(int[] array,int beg,int end)
	{
		if(beg >= end || array == null)
			return;
		int p = partition(array, beg, end);
		quickSort(array, beg, p-1);
		quickSort(array, p+1, end);
	}
}

private static int partition(int[] array, int beg, int end)
{
	int tmp;
	int first = array[beg];
	int i = beg;
	int j = end;
	while (i < j)
	{
		while (array[i] <= first && i < end)
		{
			i++;
		}
		while (array[j] > first && j >= beg)
		{
			j--;
		}
		if (i < j)
		{
			tmp=array[i];
			array[i] = array[j];
			array[j] = tmp;
		}
	}
	if (j != beg)
	{
		tmp=array[beg];
		array[beg] = array[j];
		array[j] = tmp;
	}
	return j;
}

五.Switch

编译时会对 switch 进行优化,根据 case 标签后面的常量值,生成跳转表,只经过少数次数的比较,就可以跳到对应标签下面。所以,在 switch ( 变量 ) 这一行里,变量只能是整型或字符型

六.For(int i:a[10])

import java.util.Random;
import java.util.Arrays;

class test {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		int[] num=new int[20];
		java.util.Random r=new java.util.Random();
		for (int i=0;i<num.length;i++) {
			 num[i]=(r.nextInt()%20+20)%20;
		}
		for (int i : num) {
			System.out.print(i+" ");
		}
		Arrays.sort(num);
		System.out.println("");
		for (int i : num) {
			System.out.print(i+" ");
		}
	}


}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值