[자바]무시 하기 쉬 운 문제 들

4841 단어 자바
1.
정적 방법 에 서 는 정적 이 아 닌 구성원 이나 구성원 방법 을 호출 할 수 없습니다.

    비정 상 멤버 변 수 를 인용 할 수 없습니다.잘 알 고 있 습 니 다.
    public class A
{
    int a;
    public static void main(String[] args)
    {
      a = 2;//  !!a   
    }
}

그러나 사람들 은 다음 과 같은 상황 을 소홀히 한다.
package cn.edu.chd.test;
public class B
{
    public static void main(String[] args)
    {
        new C();//  ,      
        new B().new C();//    
        new D();//  ,      
    }
    public void func()
    {
        new C();//  
        new D();//  
    }
    class C
    {
    }
    static class D
    {
        
    }
}

C 클래스 는 B 클래스 의 구성원 변수 에 해당 하기 때문에 정적 방법 에서 new 인 스 턴 스 를 낼 수 없습니다(기억 하 세 요:
클래스 의 정적 방법 은 동적 방법 을 직접 호출 할 수 없습니다.
그렇지 않 으 면 오류 알림:
No enclosing instance of type B is accessible. Must qualify the allocation with an enclosing instance of type B (e.g. x.new A() where x is an 
instance of B).
2.proctected 수식 구조 기 는 가방 내부 에서 new 인 스 턴 스 를 받 을 수 있 고 다른 가방 비 하위 클래스 에 서 는 new 인 스 턴 스 를 받 을 수 없습니다.다른 만두 류 에 접근 할 수 있 습 니 다(익명 류 포함):
도 메 인 패키지:
package cn.edu.chd.domain;
public class A
{
    protected A(){
        System.out.println("A constructor");
    }
}

테스트 패키지:
package cn.edu.chd.test;
import cn.edu.chd.domain.A;
public class B
{
    public static void main(String[] args)
    {
    }
    public void func()
    {
        new A();//  !!!The constructor A() is not visible
        new C();//  ,A      A  protected   
      new A(){};//  ,             new A     
    }
    class C extends A
    {//C            super.A()
    }
}

3.클래스 앞의 수식 어 는 세 가지(public/abstract/final)만 있 고 내부 류 는 제외 합 니 다.
4.접근 권한 문제:
클래스 의 한 구성원(방법 또는 속성,method or field)의 접근 권한:
1.package(또는 friendly 라 고도 부 르 지만 쓰 지 않 아 도 됩 니 다.friendly 도 키워드 가 아 닙 니 다)권한 은 같은 가방 의 클래스 와 이 클래스 를 계승 하 는 하위 클래스 에 접근 할 수 있 습 니 다.
2.Public 권한,모든 종류 에 접근 할 수 있 습 니 다.
3.private 권한,이러한 내부 의 구성원(방법,속성,내부 클래스)은 접근 할 수 있 고 이러한 인 스 턴 스 대상 도 접근 할 수 없습니다.
4.proctected 권한,계승 접근 권한,가방 안의 나머지 클래스 와 이 클래스 를 계승 하 는 하위 클래스 는 접근 할 수 있 으 며 friendly 권한 과 차이 가 많 지 않 습 니 다.
클래스 에서 구조 함수 의 접근 권한:
1.Public 는 간단 합 니 다.
2.proctected 구조 함 수 는 이러한 하위 클래스 를 계승 하여 호출 할 수 있 으 나 가방 밖 이나 하위 클래스 이외 의 곳 에서 호출 되 어 인 스 턴 스 를 만 들 수 없습니다.
3.private 이 종 류 는 계승 할 수 없습니다.
내부 클래스 접근 권한:
1.Public 어느 곳 에서 든 방문 가능
2.protected 는 같은 가방 에 접근 할 수 있 고 서로 다른 가방 의 하위 클래스 에 접근 할 수 있 습 니 다.
3.friendly(기본 권한)같은 가방 에 접근 할 수 있 습 니 다.
4.private 는 이 내부 클래스 의 외부 클래스 자체 만 접근 할 수 있 습 니 다.
클래스 접근 권한:
1.Public 어느 곳 에서 든 방문 가능
2、friendly 기본 권한,패키지 권한 이 라 고도 부 르 며 같은 가방 에서 접근 할 수 있 습 니 다.
5.추상 류 는 abstract 로 수식 하 는 종류 인 데 이런 종류 안에 추상 적 인 방법 이 있 을 수도 있 고 없 을 수도 있다!!
(1)추상 류 에 반드시 추상 적 인 방법 이 있 는 것 은 아니 지만 추상 적 인 방법 이 있 는 유형 은 반드시 추상 류 이다.
(2).추상 류 는 예화 되 어 서 는 안 된다!
package cn.edu.chd.demo;
public abstract class Demo
{
//    public abstract void func();//           ,  HttpServlet 
    public void func1()
    {
        
    } 
}

6.클래스 에서 설명 하 는 범 형 은 비정 상 구성원 에 게 만 유효 합 니 다.
package cn.edu.chd.basic;
public class Demo<T>
{
    public void aa(T t)
    {   
    }
    
    public void bb(T t1,T t2)
    {    
    }
    
//                    
    public static <T> void cc(T t)
    {
    }
}

7.
finally 블록 에서 코드 가 실행 되 지 않 는 경우
package  demo;
/**
 *  @author   Rowand   jj
 *     finally       
 */
public   class  TryDemo
{
     public   static   void  main(String[] args)
    {
         try
        {
            System. out .println( "aaaa" );
            System. exit (1);
        }  catch  (Exception e)
        {
             //  TODO : handle exception
        }
         finally
        {
            System. out .println( "ha" );
        }
    }
}

8.
final 수식 변 수 는 인용 대상 을 바 꿀 수 없 지만 대상 의 내용 을 바 꿀 수 있 습 니 다.
public   class  Deemo
{
     public   static   void  main(String[] args)
    {
         final   Person  p =  new   Person ( "zhangsan" ,11);
        p.setAge(12);//  
        System. out .println(p.getAge()); 
//        p = new Person(" lisi ",22); //  
    }
}
class   Person
{
     int   age ;
    String  name ;
    
     public  Person(String name, int  age)
    {
         this . name  = name;
         this . age  = age;
    }
     public   int  getAge()
    {
         return   age ;
    }
     public   void  setAge( int  age)
    {
         this . age  = age;
    }
     public  String getName()
    {
         return   name ;
    }
     public   void  setName(String name)
    {
         this . name  = name;
    }
     }

좋은 웹페이지 즐겨찾기