[三]java作业,java作业
分享于 点击 27457 次 点评:259
[三]java作业,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+" ");
}
}
}
相关文章
- 暂无相关文章
用户点评