Путь
Путь и метод написания компилятора Java при составлении файлов .java и виртуальных машин Java выполняют.
Без установки каких-либо переменных среды класса, Javac может собирать файлы с полным путем .java. Например:
Javac D: /myjava/helloworld.java
После компиляции генерируйте файлы классов в одном и том же каталоге пути.
Виртуальная машина Java по умолчанию должна искать файлы классов из пути переменной среды ClassPath для выполнения. Для виртуальной машины Java это не файл класса, а класс. У него есть только пути классов, но нет путей файловой системы. Переменная среда Classpath - это среда, которая обеспечивает поисковый путь для виртуальных машин Java. Обратите внимание, что виртуальная машина не рекурсивно ищет пути, определяемые ClassPath.
То есть приведенный выше файл Java может быть составлен правильно, но не может быть выполнен. Но если группа класса установлена на ".; D:/myjava/", виртуальная машина Java сначала будет искать из текущего пути, а затем искать файл класса из D:/myjava.
Таким образом, после приведенного выше Helloworld.java составлен, он может быть выполнен напрямую:
Java Helloworld
Или переключитесь на каталог D:/Myjava и выполните Java Helloworld.
Но следующее - неправильный путь. В конце концов, хотя newdir.java может быть составлен правильно, во время выполнения, он будет искать, доступен ли Newdir.class в текущем каталоге (D:/myjava), а затем искать, доступен ли Newdir.class в D:/Myjava, но он не будет повторяться в подканатор NewDir для поиска файлов класса.
D:/CD Myjavajavac Newdir/Newdir.javajava Newdir
Например, в соответствии с d:/myjava/hello есть два исходных файла Java, и их содержимое следующее:
D:/myjava/hello cat.java Dog.javacat.java ============================================================================================================================================= Public Class Dog {public static void main (string [] args) {cat c = new Cat (); }}Класс собак напрямую новые объекты класса CAT в другом файле. Независимо от того, скомпилируется или запускается, это может быть успешным, потому что компилятор Javac автоматически будет искать Cat.class с пути, указанного в Classpath при составлении Dog.java. Это просто способ поиска, и этот класс является публичным классом, поэтому компиляция успешна.
Короче говоря, должно быть ясно, что компилятор Javac ищет пути файлов, что не имеет ничего общего с переменной среды. Виртуальная машина Java ищет файлы классов, строго говоря, классы и путь поиска определяется переменной среды ClassPath и имеет последовательность.
Для получения дополнительных описаний классов, см. «Пакет» ниже.
Упаковка
Пакеты - это коллекции классов. Напишите ключевое слово пакета в первой строке исходного файла Java (за исключением строк комментариев или пустых строк) и дайте имя пакета, вы можете поместить файл класса в пакет.
Например, файл d: /myjava/cat.java:
пакет com.longshuai.home; открытый класс Cat {public static void main (string [] args) {System.out.println ("com.longshuai.home.cat"); }}Это означает размещение класса Cat в пакет Com.longshuai.home. Пакеты должны быть названы в честь обратного доменного имени, чтобы предотвратить конфликтующие имена пакетов, конечно, это не обязательно.
Для исходных файлов, которые не используют директивы пакетов, классы внутри них будут рассматриваться как «обнаженные классы» по умолчанию во время компиляции.
Метод управления Java управляется на уровне каталога, соответствующего имени пакета. Например, пакет com.longshuai.home выше должен быть размещен под Com/longshuai/Home (если это Windows, Backslash), то есть Com/longshuai/home/cat.class.
Javac ищет файлы из путей во время компиляции. Например, поместите эту кошку. При выполнении виртуальная машина Java ищет файл класса, который будет загружен с класса, и способ загрузки класса - использовать «». Чтобы подключить различные типы имен. Следовательно, методы составления этого файла и выполнения этого файла с помощью Java Virtual Machine:
javac com/longshuai/home/cat.javajava com.longshuai.home.cat
Обратите внимание, что между вложенными пакетами нет никаких отношений, таких как пакет java.util и java.util.jar, пакеты не имеют никаких зависимостей.
Используйте классы в пакете пакета и импорта (импорт)
В исходном файле Java классы в других файлах не могут быть использованы напрямую, если только класс, который вы хотите использовать, не может быть поиск по пути ClassPath. Чтобы ссылаться на другие классы, которые не являются ClassPath, вы можете добавить их только в ClassPath или загрузить их в пакеты, а затем обратиться к классам в пакете.
На ссылки на класс в пакете можно ссылаться, указав имя пакета. Например:
com.longshuai.home.cat c = new com.longshuai.home.cat ();
Но, очевидно, это неудобно. Вы можете использовать директиву импорта для импорта классов в пакете, который вам необходимо использовать в первых нескольких строках исходного файла Java (но после команды пакета). Например, импортируйте класс CAT, чтобы вы могли напрямую использовать класс:
импорт com.longshuai.home.cat; cat c = new Cat ();
При импорте пакетов вы можете использовать звездочку «*» в конце дико соответствовать всем импортированным классам и использовать только «*» в конце, потому что «*» соответствует имени класса, а не имени пакета. Следовательно, символ «*» не может быть использован в неэндах, чтобы указать классы в других пакетах, таких как:
Импорт com.longshuai.home.*; // импортировать все классы в com.longshuai.home пакет импорт com.longshuai.*; // Импорт всех классов в пакете com.longshuai, но классы в com.longshuai.home не будут импортированы, // потому что между уровнями есть гнездо, эти пакеты не имеют импорта взаимосвязи*.*.*; // это неправильный способ написать
Если в импортированном пакете есть класс с тем же именем, при ссылке на класс с тем же именем возникнет противоречивая ошибка. Например, в пакетах java.util и java.sql есть уроки даты.
Импорт java.util.*; импортировать java.sql.*; public class test {public static void main (string [] args) {date Today = new Date (); }}Компиляция:
Javac test.javatest.java:11: Ошибка: Ссылка на сегодняшний день неясна дата сегодня = новая дата (); ^ Класс java.sql.date в java.sql и класс java.util.date в java.util оба совпадений. ^ Класс java.sql.date в java.util и класс Java.util оба совпадают с 2 ошибками
В настоящее время вы можете явно импортировать класс Date или указать имя пакета при использовании класса Date. То есть следующие два метода верны:
// Метод 1: Импорт java.util.*; Import java.sql.*; Импорт java.util.date; // Метод 2: Импорт java.util.*; Импорт java.sql.*; Тест открытого класса {public static void main (string [] args) {java.ut.date сегодня = new java }}В дополнение к импорту классов в пакетах, вы также можете статические методы и статические переменные в классах в пакетах. Просто добавьте статическое ключевое слово и укажите, что импортировать. Например:
Импорт статический java.lang.system.*; импорт статический java.lang.system.out;
После статических методов импорта префикс может быть опущен, например:
Импорт static java.lang.system.out; public class classname {public static void main () {out.println ("helloworld"); // эквивалент system.out.println ("helloworld"); }}Архив упаковка в пакет JAR
Виртуальная машина Java может напрямую распознавать пакет JAR. Вы можете архивировать путь, соответствующий имени пакета в пакет JAR, используя команду JAR. Инструкции по использованию команды JAR следующие:
JAR Использование: jar {ctxui} [vfmn0pme] [jar -file] [manifest -file] [точка входа] [-c dir] Файлы ... Параметры: -c Создание нового файла -t Перечислите архивный каталог -x. Извлеките указанный (или все) файлы из архив -обновления. Manifest File -n После создания нового файла выполните нормализацию Pack200 -e Укажите точку записи приложения для автономного приложения, связанного с исполняемой файлом JAR -0 только хранилище; Не используйте какое -либо сжатие ZIP -p. Сохраняйте ведущий компонент '/' (Absolute Path) и «..» (Parent Directory) -m не создает файл манифеста для записей -i -это указанный индекс генерации файлов JAR -c изменение в указанном каталоге и содержит следующие файлы, если какой -либо файл является каталором, он обрабатывается повторяющимся. Указанный порядок имени файла манифеста, имя файла архива и имя точки входа такое же, как и у тегов «M», «f» и «e».Например, пакет A.Class и B.Class в текущем каталоге в Test.jar:
JAR CVF Test.jar A.Class B.class
Проверьте список файлов в пакете JAR и будет отображаться рекурсивно:
jar -tf test.jarmeta-inf/meta-inf/manifest.mfjiecheng.class
Например, архивируйте каталог com в d: /dp.jar.
JAR CVF D: /DP.JAR COM/Добавлен добавленный манифест: com/(input = 0) (output = 0) (хранилище 0%) Добавлено: com/longshuai/(input = 0) (выход = 0) (хранилище 0%) добавлено: com/longshuai/home/(input = 0) (выход = 0) (storage 0%) добавлено: com/longshuai/home/bird.class. (Сжатие 30%) Добавлено: com/longshuai/home/bird.java (input = 136) (выход = 100) (сжатый 26%) Добавлен: Com/longshuai/Home/Cat.class (вход = 417) (выход = 289) (сжатый на 30%) Добавление: com/longshuai/home/cat.java (input = 134) (выходы = 99) (Com/longshuai/home/cat.java (input = 134) (выход = 99) (выходы) (выходы = 99).
С помощью файла JAR вы можете непосредственно установить путь ClassPath на имя файла JAR, так что при поиске файлов класса вы будете напрямую искать в файле JAR. Например, Classpath установлен на:
.; D:/myjava; d: /dp.jar
Механизм поиска класса
При поиске файлов классов в виртуальных машинах Java, в дополнение к пути, указанного переменной среды ClassPath, сначала будут искать два пути по умолчанию: JRE/LIB и JRE/LIB/EXT, классы, которые, кажется, иссятся в файле JAR в JRE/LIB/EXT.
Например, когда ClassPath установлен на ".; D:/myjava; d: /myjar.jar", вы хотите найти файл класса com.longshuai.com.cat:
(а). Первый поиск файлов JAR в соответствии с JRE/LIB и JRE/LIB/EXT;
(б).
(c) .search d: /myjava/cat.class снова;
(d) .Search для того, есть ли класс com.longshuai.com.cat в файле d: /myjar.jar.
Если на класс упоминается в исходном файле Java, во время компиляции будут использоваться следующие методы для определения того, является ли класс разумным и действительным:
(1) .Search, содержит ли импортированный класс пакета класс.
(2). Поиск неявно импортированный пакет java.lang, который импортируется по умолчанию.
(3). Определяется ли этот класс в текущем файле.
(4). Поиск для того, находится ли класс в нем в соответствии с правилами поиска в классе ((a)-(d)).
наследовать
Семантическая логика «Что такое» может быть отражена между классами, чтобы можно было реализовать наследование классов. Например, кошка - это животное, тогда кошка может наследовать класс животных, в то время как класс кошек называется подклассом, а класс животных называется родительским классом.
После того, как подкласс наследует родительский класс, у подкласса есть все члены родительского класса, включая переменные и методы членов. Фактически, в памяти, когда используются новые подклассы, часть области разделена на кучу для хранения атрибутов, унаследованных от родительского класса. Например, область A, полученная новым родителем, область B, полученная новым ребенком, и область A находится в области B.
Причина, по которой дочерний объект содержит родительский объект, заключается в том, что когда новый дочерний объект объект сначала вызывается для построения дочернего объекта, и при начинающем строительном объекте, конструктор родительского класса сначала вызывается для построения родительского объекта. Другими словами, перед формированием дочернего объекта, родительский объект всегда образуется сначала, а затем медленно дополняет атрибуты в детском объекте. Для конкретного содержания см. «Переписать супер () метода строительства во время наследования».
У подкласса есть не только членов родительского класса, но и имеет своих собственных уникальных членов, таких как свои собственные методы и свои собственные переменные члена. Легко понять, что имена участников в подклассах и родительских классах разные, но они также могут быть одинакового имени. Если в подкласке есть методы, унаследованные от родительского класса , например, родительский класс имеет метод eat (), а у ребенка также есть метод eat (), то это может быть переписыванием метода (см. Ниже). Если переменные элемента в подкласке и переменные члена родительского класса имеют одинаковое имя, они не зависят друг от друга . Например, родительский класс имеет атрибут имени, а подкласс также определяет сам атрибут имени, который разрешено, поскольку их можно назвать с помощью этого и супер соответственно.
Используйте Extends Keyword при наследственных классах. При наследстве Java допускает наследство только от одного родительского класса.
класс Человек {Строка Имя; int возраст; void eat () {System.out.println ("eath ...");} void sleep () {System.out.println ("Sleep ...");}} класс Студент расширяет Person {int StudentId; Студент (int id, string name, int age) {this.name = name; this.age = возраст; this.studentid = id; } void neseming () {System.out.println ("Studing ...");}} открытый класс наследство {public static void main (string [] args) {студент S1 = новый студент (1, "Malongshuai", 23); System.out.println (s1.studentid+","+s1.name+","+s1.age); s1.eat (); s1.sleep (); s1.study (); }}Приведенный выше пример объяснения, основанного на классе и пакете Java Classpath, - это все контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.