Java 는 키워드 native,volatile,transient 프로필 을 자주 사용 하지 않 습 니 다.
abstract continue for new switch
assert*** default goto* package synchronized
boolean do if private this
break double int protected throw
byte else import public throws case
enum**** instanceof return transient catch extends
implements short try char final interface
static void class finally long strictfp**
volatile const* float native super while
/*----------------------- --------------------------------------------*/
* not used
** added in 1.2
*** added in 1.4
**** added in 5.0
그 중에서 goto 와 const 는 보존 자 입 니 다.현재 버 전에 서 는 사용 되 지 않 습 니 다.흔히 볼 수 있 는 세 가지 키워드 로 보 이 는 true,false,null 은 모두 키워드 가 아니 라 단독 표지 유형 입 니 다.
자 바 를 계속 사용 하지만,많은 키 워드 는 아직 보지 못 했 습 니 다.그리고 사용 해도 모 르 는 것 을 사용 합 니 다.자신 이 조금 만 copy 테이프 로 정 리 를 해 보 세 요~~~
CSDN 에서 어떤 사람 이 개괄적 으로 말 하 는 것 을 보 았 다.
쓰다
native
로 컬 프로그램 을 호출 해 야 할 때
transient
당신 의 클래스 는 자바.io.Serializable 을 실현 하 였 으 며,당신 이 어떤 필드 를 저장 하고 싶 지 않 을 때
volatile
이 필드 는 다른 스 레 드(직접 또는 간접)에 접근 할 수 있 으 며,모든 스 레 드 가 최신 데 이 터 를 얻 을 수 있 도록 보장 하고 싶 습 니 다.
(성능 에 손실 이 있 을 거 야.안전 을 위해 성능 을 희생 하 는 일이 많아.)
이해 하기 쉬 워 요.
다음 에 예 를 붙 여서 한가 할 때 두 드 리 지 않 고 깊이 이해 할 수 있 습 니 다.
1、Native
네 이 티 브 는 방법 수정자 입 니 다.Native 방법 은 다른 언어(예 를 들 어 c/c+,FORTRAN,어 셈 블 리)로 이 루어 진 로 컬 방법 입 니 다.보통 JNI 에 사 용 됩 니 다.예 는 다음 과 같다.
public class testdll
{
static
{
System.loadLibrary("test");
}
public native static int get();
public native static void set(int i);
public static void main(String[] args)
{
testdll test = new testdll();
test.set(10);
System.out.println(test.get());
}
}
test.dll 은 VC 로 쓸 수 있 습 니 다.예 를 들 어:
-----testdll.h-----
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class testdll */
#ifndef _Included_testdll
#define _Included_testdll
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: testdll
* Method: get
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass);
/*
* Class: testdll
* Method: set
* Signature: (I)V
*/
JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif
-------testdll.c-----------
#include "testdll.h"
int i = 0;
JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass)
{
return i;
}
JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint j)
{
i = j;
}
2、transient
transient 는 변수 수정자 로 transient 로 표 시 된 변수 입 니 다.한 대상 을 직렬 화 할 때 이 변수 상 태 는 직렬 화 되 지 않 습 니 다.
예 를 들 어 특정한 유형의 구성원 변 수 를 transient 라 고 가정 하면 Object OutputStream 을 통 해 이러한 인 스 턴 스 를 디스크 에 저장 할 때 실제 transient 변수의 값 은 저장 되 지 않 습 니 다.
대상 이 메모리 에 직렬 화 되 어 저 장 될 때 일부 필드 데이터 가 저장 되 는 것 을 원 하지 않 습 니 다.안전성 을 확보 하기 위해 서 이 필드 를 transient 로 설명 할 수 있 습 니 다.
좀 더 분명하게 하려 면 서열 화 된 내용 을 볼 수 있다.
3、volatile
volatile 수식 변수.
스 레 드 에 접근 할 때마다 공유 메모리 에서 이 구성원 변수의 값 을 다시 읽 도록 강요 합 니 다.그리고 구성원 변수 가 바 뀌 었 을 때 공유 메모리 에 변경 값 을 다시 쓰 도록 강요 합 니 다.이렇게 하면 언제든지 두 개의 서로 다른 스 레 드 는 특정한 구성원 변수의 같은 값 을 볼 수 있다.
Java Language Specification 의 예 를 보십시오.
조건:스 레 드 가 멈 추 지 않 는 호출 방법 one(),스 레 드 가 멈 추 지 않 는 호출 방법 two().나 는 여러 차례 테스트 를 해 보 았 는데,이런 상황 은 줄곧 나타 나 지 않 은 것 같다.
class Test {
static int i = 0, j = 0;
static void one() { i++; j++; }
static void two() {
System.out.println("i=" + i + " j=" + j);
}
}
결 과 는 가끔 j 가 i 보다 큰 상황 이 발생 할 수 있 습 니 다.방법 이 동기 화 되 지 않 았 기 때문에 i 와 j 가 한 번 의 업데이트 가 아 닐 수도 있 습 니 다.이러한 상황 을 방지 하 는 방법 은 두 가지 방법 이 synchronized 라 는 것 을 설명 하 는 것 이다.
//
class Test {
static int i = 0, j = 0;
static synchronized void one() { i++; j++; }
static synchronized void two() {
System.out.println("i=" + i + " j=" + j);
}
}
이렇게 하면 두 가지 방법 이 동시에 실행 되 는 것 을 방지 할 수 있 고 j 와 i 가 동시에 업데이트 되 는 것 도 보장 할 수 있다.그러면 i 와 j 의 값 은 항상 같다.
또 다른 경 로 는 i 와 j 를 volatile 로 성명 하 는 것 이다.
//
class Test {
static volatile int i = 0, j = 0;
static void one() { i++; j++; }
static void two() {
System.out.println("i=" + i + " j=" + j);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.