이 글은 주로 Kotlin과 Java의 기본 구문 비교에 대한 관련 정보를 소개합니다. 필요한 친구들은 참고하면 됩니다.
Kotlin과 Java의 기본 구문 비교
Kotlin Java보다 젊지만 매우 유망한 프로그래밍 언어이며 Kotlin 커뮤니티는 지속적으로 성장하고 있습니다. 모두가 그것에 대해 이야기하고 있었고 멋지다고 말했습니다. 그런데 왜 그렇게 특별할까요? Kotlin에서 Android
애플리케이션을 개발한 경험을 공유하기 위해 일련의 기사를 준비했습니다. 어떤 언어가 자신에게 가장 적합한지 결정할 수 있도록 구문, 유용성, UI 성능, 비동기성 측면에서 Kotlin과 Java의 차이점을 논의하겠습니다.
몇 가지 기본적인 구문 차이점부터 살펴보겠습니다. 첫 번째는 다음과 같습니다.
1. Kotlin을 사용하면 더 적은 코드로 더 많은 작업을 수행할 수 있습니다.
Kotlin의 주요 장점은 단순함입니다. 그것. 더 적은 코드로 더 많은 기능을 얻을 수 있습니다. 그리고 코드를 적게 작성할수록 실수도 줄어듭니다. 매우 간단합니다.
클래스부터 시작하여 Kotlin의 기본을 살펴보겠습니다.
public final class Person { private String name; private int age; private float height; public Person(String name, int age, float height) { this.name = name; this.age = age; this.height = height; } public Person(String name, int age) { this.name = name; this.age = age; this.height = 1.8f; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public float getHeight() { return height; } public void setHeight(float height) { this.height = height; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", height=" + height + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; if (age != person.age) return false; if (Float.compare(person.height, height) != 0) return false; return name != null ? name.equals(person.name) : person.name == null } @Override public int hashCode() { int result = name != null ? name.hashCode() : 0; result = 31 * result + age; result = 31 * result + (height != +0.0f ? Float.floatToIntBits(height) : 0); return result; } }
위는 일반적인 Java 클래스입니다. 별로 효과가 없습니다. 단지 일부 데이터가 포함되어 있을 뿐입니다. 그러나 이 코드가 테이블에 가져오는 단점을 깨달을 때 이 코드가 얼마나 큰지 확인하는 것은 고통스럽습니다. 여러분을 격려하기 위해 Kotlin으로 작성된 동등한 수업을 제공할 것입니다.
data class Person(var name: String, var age: Int, var height: Float = 1.8f)
예, 데이터 클래스에 필요한 getter, setter, equals(), hashcode(), toString() 및
copy()
함수를 자동으로 가져옵니다.! 물론 이러한 함수를 쉽게 재정의할 수 있지만 대부분의 경우 클래스와 클래스의 속성을 선언하는 것만으로도 충분합니다. Kotlin이 간결하다고 말하는 것은 바로 이러한 의미입니다.
예외
이제 우리는 많은 프로그래밍 언어에서 가장 큰 어려움을 상기시키고 싶습니다. - 널 포인터가 비정상적입니다. Tony Hall이 1965년에 일을 더 단순하게 만들려고 노력하면서 널 포인터를 발명한 이후로 얼마나 많은 개발자가 널 포인터로 인해 어려움을 겪었는지 상상할 수 없습니다.
val person: Person? = null ... person?.name = "John"
변수
가 null을 허용하는 경우 컴파일러는 적절한 검사 없이는 해당 변수에 액세스하는 것을 허용하지 않습니다. Kotlin이 이를 사용하도록 강요하나요?
운영자. 이렇게 하면 애플리케이션이 자동으로 충돌하는 것을 방지할 수 있습니다. 내부적으로는 어떻게 작동하나요? 생성된 바이트코드를 검토해 보겠습니다. rree보시다시피 여기에도 동일한 빈 수표가 있습니다. Kotlin을 만든 JetBrains 개발자는 매번 변수를 확인하는 것이 NullPointerException을 피할 수 있는 유일한 방법이라는 것을 알고 있습니다. 그러나 그들은 Android 개발자가 프로젝트에서 NullPointerException을 처리하고 싶어하지 않는다는 것도 알고 있습니다. 그들은 다음과 같이 생각할 수도 있습니다. "변수가 nullable인 경우 자동으로 이 검사를 생성하지 않는 이유는 무엇입니까?
util 클래스가 없는 프로젝트를 해본 적이 있나요? 영리한 솔루션입니다. 확장 함수 - 모든 유틸리티 클래스를 완전히 제거하는 데 도움이 됩니다.
fun Context.toast(text: String) = Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
'이것'이 무엇인지 참고하세요. makeText() 메소드에 전달된 매개변수로 사용합니까? 이것은 이 함수를 선언하는 클래스의 인스턴스가 아니라 Context 인스턴스입니다. 이제 Activity 또는 다른 Context 인스턴스에서 이 함수를 직접 호출할 수 있습니다. >
L2 LINENUMBER 18 L2 ALOAD 3 DUP IFNULL L3 LDC "John" INVOKEVIRTUAL igalata/com/kotlinexample/Person.setName (Ljava/lang/String;)V GOTO L4 L3 POP
확장 함수는 어떤 식으로든 확장한 클래스를 수정하지 않는다는 점을 기억해야 하는데, 원래 클래스를 변경하지 않고 어떻게 작동하는지 바이트코드를 다시 살펴볼까요? >
toast("Hi")하! 함수는 암시적으로 첫 번째 인수로 확장된 클래스의 인스턴스를 받습니다. 본문에서 "this"에 대한 모든 액세스는 액세스로 대체됩니다. 실제로는 이 기능을 프로젝트의 어느 곳에서나 사용할 수 있습니다.
你还记得findViewById()method()吗? 我们相信你不喜欢它。 我们也不是。 此外,我们不想为我们需要访问的每个视图声明变量和Butterknife注释。
你可以忘记与Kotlin Android Extensions的视图绑定。 不再需要创建变量和绑定视图。 您可以使用在xml布局中声明的标识符直接访问您的视图。
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.button); final TextView text = (TextView) findViewById(R.id.text); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { text.setText("You've clicked a button"); } }); } } class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) { super.onCreate(savedInstanceState, persistentState) setContentView(R.layout.activity_main) button.setOnClickListener { text.text = "You've clicked a button" } } }
这太简单了,不是吗?
基本上,findViewById()方法仍在使用中。 但是没有必要自己写。 Kotlin会为你做。
当您使用Android扩展时,findCachedViewById()函数和HashMap实例将会自动生成。 每次通过其标识符访问您的视图将被一个新的函数调用替换。 如果是第一次访问视图,此函数将调用通常的findViewById()函数,并将接收的视图添加到HashMap中,以便在下次访问视图时从中检索视图。
5. 你可以更容易地使用集合
让我们谈谈Kotlin的集合。 因为我们经常需要使用数据模型集合执行困难的操作。 例如,我们可能有一个学生名单,我们需要从中检索三个A级成绩的学生和两个B成绩的学生。
看看Kotlin的解决方案:
var students = listOf(Student("John", 0), Student("Julia", 2), Student("Matt", 1), Student("Katie", 0), Student("Dan", 0)) var firstList = students.filter { it.mark == 0 }.take(3) var secondList = students.filter { it.mark == 1 }.take(2)
下面是我们如何解决Java中的同样的问题:
ArrayList<Student> students = new ArrayList<Student>() {{ add(new Student("John", 0)); add(new Student("Julia", 2)); add(new Student("Matt", 1)); add(new Student("Katie", 0)); add(new Student("Dan", 0)); }}; ArrayList<Student> firstList = new ArrayList<>(); ArrayList<Student> secondList = new ArrayList<>(); for (Student student: students) { boolean isFirstFilled = firstList.size() >= 3; boolean isSecondFilled = secondList.size() >= 2; if (isFirstFilled && isSecondFilled) break; int mark = student.getMark(); if (mark == 0 && !isFirstFilled) { firstList.add(student); } else if (mark == 1 && !isSecondFilled) { secondList.add(student); } }
这只是一个小例子,说明如何在Kotlin和Java中使用集合,但你可以看到差别! 你能想象如果我们处理一个大项目的集合,Kotlin会有什么区别吗?
위 내용은 Java와 Kotlin의 기본 구문에 대한 자세한 비교의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

JVM은 Java 코드를 기계 코드로 변환하고 리소스를 관리하여 작동합니다. 1) 클래스로드 : .class 파일을 메모리에로드하십시오. 2) 런타임 데이터 영역 : 메모리 영역 관리. 3) 실행 엔진 : 해석 또는 컴파일 바이트 코드. 4) 로컬 메소드 인터페이스 : JNI를 통해 운영 체제와 상호 작용합니다.

JVM을 통해 Java는 플랫폼을 가로 질러 실행할 수 있습니다. 1) JVM 하중, 검증 및 바이트 코드를 실행합니다. 2) JVM의 작업에는 클래스 로딩, 바이트 코드 검증, 해석 실행 및 메모리 관리가 포함됩니다. 3) JVM은 동적 클래스 로딩 및 반사와 같은 고급 기능을 지원합니다.

Java 응용 프로그램은 다음 단계를 통해 다른 운영 체제에서 실행할 수 있습니다. 1) 파일 또는 경로 클래스를 사용하여 파일 경로를 처리합니다. 2) system.getenv ()를 통해 환경 변수를 설정하고 얻습니다. 3) Maven 또는 Gradle을 사용하여 종속성 및 테스트를 관리하십시오. Java의 크로스 플랫폼 기능은 JVM의 추상화 계층에 의존하지만 여전히 특정 운영 체제 별 기능의 수동 처리가 필요합니다.

Java는 다른 플랫폼에서 특정 구성 및 튜닝이 필요합니다. 1) 힙 크기를 설정하기 위해 -xms 및 -xmx와 같은 JVM 매개 변수를 조정하십시오. 2) 병렬 GC 또는 G1GC와 같은 적절한 쓰레기 수집 전략을 선택하십시오. 3) 다른 플랫폼에 적응하도록 기본 라이브러리를 구성하십시오. 이러한 측정을 통해 Java 응용 프로그램은 다양한 환경에서 가장 잘 수행 할 수 있습니다.

OSGI, APACHECMONSLANG, JNA, andJVMOPTIONSAREEFFICEPIPERINGLINGPLATFORM-SPECIFICCHALLENGENJAVA.1) OSGIMANAGESDENCENTENCENDISONDISOLATESCOMPONENTS.2) APACHECOMMONSLANGPROVIDEUTIOMITIONFUCTIONS.3) JNAALLOWSCALLINGNATIVECODE.4) JNAALLOWSCALTINGBEHAV

jvmmanagesgarbageCollectionAcrossplatformSefficialthegendercationalStrationallySticallySticallySuciationalStrationalSproachandAptingToosandHardwaredifferences.ITEMPLOYSVARIOUSCOLLECTORSLIKESERIAL, PARALING, CMS, 및 G1, 각각의 소지 firedFferentscenarios.performanceCanbetwithflags-xex : xa

Java의 "Write Onge, Run Everywhere"철학은 JVM (Java Virtual Machine)에서 구현되므로 Java Code는 수정없이 다른 운영 체제에서 실행할 수 있습니다. 컴파일 된 Java Bytecode와 운영 체제 사이의 중개자로서 JVM은 바이트 코드를 특정 시스템 지침으로 변환하여 프로그램이 JVM이 설치된 모든 플랫폼에서 독립적으로 실행될 수 있도록합니다.

Java 프로그램의 편집 및 실행은 Bytecode 및 JVM을 통해 플랫폼 독립성을 달성합니다. 1) Java 소스 코드를 작성하여 바이트 코드로 컴파일하십시오. 2) JVM을 사용하여 모든 플랫폼에서 바이트 코드를 실행하여 코드가 플랫폼에서 실행되도록합니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

Dreamweaver Mac版
시각적 웹 개발 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구
