Java 개선 장 (1) ---- Java의 세 가지 주요 특성 캡슐화 이해
2학년 때 자바를 접한지 거의 3년이 되어갑니다. 가장 기본적인 HTML과 CSS부터 최종 SSH까지 단계별로 진행하면서 기쁘기도 하고, 실망하기도 하고, 외로웠어요. 그는 중도 승려 임에도 불구하고 자신의 노력으로 '공부'를 완성했습니다. 이 기간 동안 훈련기관에 참여했지만 그런 훈련 방법이 너무 마음에 들지 않아 포기하고 독학을 선택했습니다(불쌍하게도 6,000위안을 지불했습니다). 그게 더 재미있었어요. 노력과 이득은 오직 당신 자신이 알잖아요. Huang Tian은 열심히 일했지만 나는 바보입니다. 4학년 첫 학기에 그는 마침내 혼자서 Java를 완성했고(그는 우회하여 반년을 낭비했습니다) 그것으로 좋은 직업을 얻었습니다. 당신은 정말!
가십이 너무 많아요! 화제가 되면서 LZ는 최근 디자인 패턴 리딩을 마쳤으며 많은 소감을 전하고 있습니다. 그리고 작업 과정에서 Java의 기초가 충분히 견고하지 않다는 것을 깊이 느낍니다. 예를 들어 IO에 익숙하지 않고, 가비지 수집, 다형성, 반사를 이해하지 못하고 가장 기본적인 세 가지 기능조차 혼동됩니다. 나! 그래서 나는 Java 기초를 보충하기로 결심했습니다! 첫 번째 강의부터---Encapsulation!!!!!!
3대 특징 중 하나---Encapsulation
Encapsulation은 말 그대로 포장을 뜻하며, 전문적인 포인트는 정보 은폐, 추상 데이터 유형을 사용하여 데이터 및 데이터 기반 작업을 캡슐화하여 분리할 수 없는 독립적인 엔터티를 형성하는 것을 의미합니다. 데이터는 추상 데이터 유형 내부에서 보호되어 내부 세부 정보를 최대한 숨기고 일부 외부 인터페이스만 유지합니다. 외부 세계와 소통합니다. 시스템의 다른 개체는 데이터 외부에 래핑된 승인된 작업을 통해서만 이 캡슐화된 개체와 통신하고 상호 작용할 수 있습니다. 즉, 사용자는 객체의 내부 내용을 알 필요는 없지만(물론 알 수 있는 방법은 없지만) 객체가 제공하는 인터페이스를 통해 객체에 접근할 수 있다.
캡슐화의 경우 객체는 자체 속성과 메서드를 캡슐화하므로 다른 객체에 의존하지 않고 자체 작업을 완료할 수 있습니다.
캡슐화를 사용하면 세 가지 주요 이점이 있습니다.
1. 좋은 캡슐화는 결합을 줄일 수 있습니다.
2. 클래스 내부 구조는 자유롭게 변경할 수 있습니다.
3. 회원을 더욱 정확하게 관리할 수 있습니다.
4. 정보를 숨기고 세부정보를 구현합니다.
먼저 두 클래스를 살펴보겠습니다: Husband.java, Wife.java
public class Husband { /* * 对属性的封装 * 一个人的姓名、性别、年龄、妻子都是这个人的私有属性 */ private String name ; private String sex ; private int age ; private Wife wife; /* * setter()、getter()是该对象对外开发的接口 */ public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setWife(Wife wife) { this.wife = wife; } }
위의 두 예에서 Husband의 wife 참조에는 getter가 없음을 알 수 있습니다. (), 그리고 동시에 아내의 나이에 대한 getter() 메소드가 없습니다. 그 이유는 남자가 아내를 깊은 집에 숨기고, 여자는 자신의 나이를 다른 사람이 알기를 원하지 않는다는 사실은 누구나 다 알고 있을 것입니다.
따라서 캡슐화는 객체의 속성을 사유화하고 외부 세계에서 액세스할 수 있는 속성에 대한 몇 가지 메서드를 제공합니다. 외부 메서드에서 액세스하지 않으려면 메서드를 제공할 필요가 없습니다. 외부 접근을 위해. 그러나 클래스가 외부 액세스를 위한 메서드를 제공하지 않으면 이 클래스는 의미가 없습니다. 예를 들어, 우리는 집을 물건으로 간주합니다. 소파, TV 시리즈, 에어컨, 티 테이블 등과 같은 내부의 아름다운 장식은 집의 사유 재산입니다. 차단하면 다른 사람들이 한눈에 볼 수 있습니다. 아무것도 남지 않은 경우는 어떻습니까? 프라이버시가 전혀 없습니다! 그 차폐벽을 통해 우리는 우리만의 프라이버시를 가질 수 있고, 다른 사람에게 영향을 주지 않고 마음대로 내부 가구를 바꿀 수 있습니다. 하지만 문도 없고 창문도 없다면 촘촘하게 포장된 블랙박스는 무슨 의미가 있을까? 그러므로 다른 사람들도 문과 창문을 통해 내부의 풍경을 볼 수 있습니다. 따라서 문과 창문은 외부 세계에 접근할 수 있도록 남겨진 집 개체의 인터페이스입니다.
이를 통해 우리는 캡슐화의 이점을 제대로 인식할 수 없습니다. 이제 프로그램 관점에서 캡슐화의 이점을 분석합니다. 캡슐화를 사용하지 않으면 객체에 setter() 및 getter()가 없으며 Husband 클래스는 다음과 같이 작성되어야 합니다:
public class Wife { private String name; private int age; private String sex; private Husband husband; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public void setAge(int age) { this.age = age; } public void setHusband(Husband husband) { this.husband = husband; } public Husband getHusband() { return husband; } }
다음과 같이 사용해야 합니다:
public class Husband { public String name ; public String sex ; public int age ; public Wife wife; }
하지만 그날 Husband를 수정해야 한다면, 예를 들어 age를 문자열 유형으로 변경하면 어떨까요? 이 클래스를 한 곳에서만 사용해도 괜찮습니다. 그런 곳이 수십, 심지어 수백 개라면 크래시로 바꾸실 건가요? 캡슐화를 사용하면 어떤 수정도 필요하지 않습니다. Husband 클래스의 setAge() 메서드만 약간 변경하면 됩니다. }
Husband husband = new Husband(); husband.age = 30; husband.name = "张三"; husband.sex = "男"; //貌似有点儿多余
다른 곳에서는 여전히 참조(husband.setAge(22))가 변경되지 않았습니다.
到了这里我们确实可以看出,封装确实可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码。
我们在看这个好处:可以对成员变量进行更精确的控制。
还是那个Husband,一般来说我们在引用这个对象的时候是不容易出错的,但是有时你迷糊了,写成了这样:
Husband husband = new Husband(); husband.age = 300;
也许你是因为粗心写成了,你发现了还好,如果没有发现那就麻烦大了,逼近谁见过300岁的老妖怪啊!
但是使用封装我们就可以避免这个问题,我们对age的访问入口做一些控制(setter)如:
public class Husband { /* * 对属性的封装 * 一个人的姓名、性别、年龄、妻子都是这个人的私有属性 */ private String name ; private String sex ; private int age ; /* 改成 String类型的*/ private Wife wife; public int getAge() { return age; } public void setAge(int age) { if(age > 120){ System.out.println("ERROR:error age input...."); //提示錯誤信息 }else{ this.age = age; } } /** 省略其他属性的setter、getter **/ }
上面都是对setter方法的控制,其实通过使用封装我们也能够对对象的出口做出很好的控制。例如性别我们在数据库中一般都是已1、0方式来存储的,但是在前台我们又不能展示1、0,这里我们只需要在getter()方法里面做一些转换即可。
public String getSexName() { if("0".equals(sex)){ sexName = "女"; } else if("1".equals(sex)){ sexName = "男"; } else{ sexName = "人妖???"; } return sexName; }
在使用的时候我们只需要使用sexName即可实现正确的性别显示。同理也可以用于针对不同的状态做出不同的操作。
public String getCzHTML(){ if("1".equals(zt)){ czHTML = "<a href='javascript:void(0)' onclick='qy("+id+")'>启用</a>"; } else{ czHTML = "<a href='javascript:void(0)' onclick='jy("+id+")'>禁用</a>"; } return czHTML; }
鄙人才疏学浅,只能领悟这么多了,如果文中有错误之处,望指正,鄙人不胜感激!
以上就是 java提高篇(一)-----理解java的三大特性之封装的内容,更多相关内容请关注PHP中文网(www.php.cn)!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











4월 17일 이 사이트의 뉴스에 따르면 TrendForce는 최근 Nvidia의 새로운 Blackwell 플랫폼 제품에 대한 수요가 강세를 보이고 있으며, 이로 인해 TSMC의 전체 CoWoS 패키징 생산 능력이 2024년에 150% 이상 증가할 것으로 예상된다는 보고서를 발표했습니다. NVIDIA Blackwell의 새로운 플랫폼 제품에는 B 시리즈 GPU와 NVIDIA 자체 GraceArm CPU를 통합한 GB200 가속기 카드가 포함됩니다. TrendForce는 현재 공급망이 GB200에 대해 매우 낙관적이며, 출하량이 2025년에 100만 개를 초과할 것으로 예상되며 이는 Nvidia 고급 GPU의 40~50%를 차지할 것으로 확인했습니다. 엔비디아는 하반기에 GB200, B100 등의 제품을 출시할 계획이지만, 업스트림 웨이퍼 패키징에는 더욱 복잡한 제품을 채택해야 합니다.

이 웹사이트는 7월 9일에 AMD Zen5 아키텍처 "Strix" 시리즈 프로세서에 두 가지 패키징 솔루션이 있을 것이라고 보고했습니다. 더 작은 StrixPoint는 FP8 패키지를 사용하고 StrixHalo는 FP11 패키지를 사용합니다. 출처: videocardz 출처 @Olrak29_ 최근 밝혀진 바에 따르면 StrixHalo의 FP11 패키지 크기는 37.5mm*45mm(1687제곱밀리미터)로 Intel의 AlderLake 및 RaptorLake CPU의 LGA-1700 패키지 크기와 동일합니다. AMD의 최신 Phoenix APU는 25*40mm 크기의 FP8 패키징 솔루션을 사용합니다. 이는 StrixHalo의 F가

PHP의 캡슐화 기술과 애플리케이션 캡슐화는 객체 지향 프로그래밍에서 중요한 개념입니다. 이는 외부 프로그램에 대한 통합 액세스 인터페이스를 제공하기 위해 데이터와 데이터에 대한 작업을 함께 캡슐화하는 것을 의미합니다. PHP에서는 액세스 제어 수정자와 클래스 정의를 통해 캡슐화를 달성할 수 있습니다. 이 기사에서는 PHP의 캡슐화 기술과 해당 애플리케이션 시나리오를 소개하고 몇 가지 구체적인 코드 예제를 제공합니다. 1. 캡슐화된 액세스 제어 수정자 PHP에서 캡슐화는 주로 액세스 제어 수정자를 통해 이루어집니다. PHP는 세 가지 액세스 제어 수정자를 제공합니다.

Vue의 Axios 캡슐화 및 일반적인 방법 소개 Axios는 Promise를 기반으로 한 HTTP 라이브러리로 가독성, 사용 용이성 및 확장성이 뛰어나다는 장점이 있습니다. 널리 사용되는 프런트엔드 프레임워크인 Vue는 Axios에 대한 완벽한 지원도 제공합니다. 이 기사에서는 Vue에서 Axios를 캡슐화하는 방법을 소개하고 일반적으로 사용되는 Axios 방법을 소개합니다. 1. Axios 캡슐화 개발 과정에서 우리는 종종 다음과 같은 Axios의 맞춤형 캡슐화를 수행해야 합니다.

C++ 함수는 코드를 캡슐화함으로써 GUI 개발 효율성을 향상시킬 수 있습니다. 코드 캡슐화: 함수는 코드를 독립적인 단위로 그룹화하여 코드를 더 쉽게 이해하고 유지 관리할 수 있도록 합니다. 재사용성: 함수는 애플리케이션 전체에서 재사용할 수 있는 공통 기능을 생성하여 중복과 오류를 줄입니다. 간결한 코드: 캡슐화된 코드는 기본 논리를 간결하고 쉽게 읽고 디버깅할 수 있도록 만듭니다.

11일 본 사이트의 소식에 따르면, 경제일보는 오늘(11일) 폭스콘그룹이 현재 주류인 패널레벨팬아웃패키징(FOPLP) 반도체 솔루션을 중심으로 첨단 패키징 분야에 진출했다고 보도했다. 1. 자회사 이노룩스에 이어 폭스콘그룹이 투자한 샤프도 일본 패널급 팬아웃 패키징 분야 진출을 발표해 2026년 생산에 들어갈 예정이다. 폭스콘 그룹 자체가 AI 분야에서 충분한 영향력을 갖고 있고, 첨단 패키징의 단점을 보완해 향후 더 많은 AI 제품 주문 수용을 촉진하는 '원스톱' 서비스를 제공할 수 있다. 이 사이트에서 참조한 공개 정보에 따르면 폭스콘 그룹은 현재 샤프 지분 10.5%를 보유하고 있으며 현 단계에서는 지분을 늘리거나 줄이지 않고 그대로 유지할 것이라고 밝혔습니다.

Go 언어에서 캡슐화 및 상속을 구현하는 방법 캡슐화 및 상속은 객체 지향 프로그래밍에서 두 가지 중요한 개념으로, 코드를 보다 모듈화하고 유지 관리하기 쉽게 만들고 코드 재사용을 위한 편의성을 제공합니다. 이 글에서는 Go 언어로 캡슐화와 상속을 구현하는 방법을 소개하고 해당 코드 예제를 제공합니다. 캡슐화 캡슐화는 데이터와 기능을 캡슐화하고, 구현 세부 사항을 숨기고, 외부 사용을 위해 필요한 인터페이스만 노출하는 것입니다. Go 언어에서는 내보낸 식별자와 내보내지 않은 식별자를 통해 캡슐화가 이루어집니다. 대문자로 된 식별자는 다른 패키지에서 접근 가능

Python은 고급 프로그래밍 언어로서 데이터 분석, 기계 학습, 웹 개발 및 기타 분야에서 널리 사용됩니다. 그러나 코드의 크기가 계속해서 확장되면서 Python 프로그램의 확장성 문제가 점차 명백해집니다. 확장성 오류는 Python 프로그램이 특정 상황에서 요구 사항 변화에 잘 적응할 수 없고 대규모 데이터를 처리할 수 없어 프로그램 성능이 저하된다는 것을 의미합니다. 너무 많은 종속성, 열악한 코드 구조, 문서 부족 등은 모두 Python 프로그램의 확장성 오류의 원인입니다.
