Пакет java.lang Класс Class (3) Имея экземпляр класса Class некоторого класса, можно извлечь сведения о его вложенных классах, конструкторах, методах и.

Презентация:



Advertisements
Похожие презентации
СТРОКИ Работа со строками. Последовательность выполнения операторов int age = 45; String s = "Не is " + age + " years old."; age не String, а переменная.
Advertisements

Строки Класс String инкапсулирует действия со строками. Объект типа String – строка, состоящая из произвольного числа символов, от 0 до 2*10 9. Литерные.
САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
1 Работа со строками в Java В языках С и C++ отсутствует встроенная поддержка такого объекта, как строка. В этих ЯП при необходимости передается адрес.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
Операции Условная операция ? : Если истинно, то результатом будет, иначе. Например, int x = a < b ? a : b вычисляет минимум из a и b.
JAVA, Кафедра ОСУ, АВТФ1 Работа со строками В пакет java.lang встроен класс, инкапсулирующий структуру данных, соответствующую строке. Класс.
Символы и строки. Процедуры и функции работы со строками.
Изучение динамического определения типов. Класс Class. Динамическая загрузка и инстанцирование классов. В Java вся информация о классе хранится в специальном.
Коллекции классов Лекция 12. С помощью коллекций вместо создания структур данных программист использует готовые структуры данных, не заботясь об их реализации.
Работа с файлами Сазонов Д.О. ПМиЭММ Часть 2. Тема занятия: Работа с файлами через потоки Для реализации файлового ввода/вывода, необходимо включить в.
Основы ООП и C# Работа с объектами и классами. Классы Класс специальный тип данных для описания объектов. Он определяет данные и поведение типа. Определение.
Строки и классы-оболочки. Класс String. Конструкторы String s = new String(); char chars[] = { 'а', 'b', 'с' }; String s = new String(chars); char chars[]
СТРОКОВЫЙ ТИП ДАННЫХ Строка это последовательность символов. Каждый символ занимает 1 байт памяти ( код ASCII). Количество символов в строке называется.
Файловый тип данных Файл – это область памяти на внешнем носителе, в которой хранится некоторая информация. В языке Паскаль файл представляет собой последовательность.
Переменные и основные типы переменных на JAVA Выполнил учитель информатики и ИКТ МБОУ СОШ р.п. Евлашево Горелочкин Н.К.
Понятие строки. Операции со строковыми величинами. Стандартные процедуры и функции обработки строковых величин. Простые алгоритмы работы со строками на.
1 Контрольное зачетное задание (0, 0)(0, m-1) (n-1, 0)(n-1, m-1) Дано прямоугольное поле, расчерченное на клетки: n клеток в высоту и m клеток в ширину.
Лекция 7 Классы - оболочки Каждому простому типу в Java соответствует класс-оболочка. Классы-оболочки выполняют две основные функции. Первая состоит в.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Транксрипт:

Пакет java.lang Класс Class (3) Имея экземпляр класса Class некоторого класса, можно извлечь сведения о его вложенных классах, конструкторах, методах и полях c помощью вызова методов getDeclaredClasses( ), getDeclaredConstructors( ), getDeclaredMethods( ), getDeclaredFields( ) в виде массива объектов типов (соответственно): Class, Constructor, Method, Field. Последние три класса определены в пакете java.lang.reflect и содержат сведения о конструкторах, полях и методах аналогично тому, как класс class хранит сведения о классах. Методы getClasses( ), getConstructors( ), getlnterfaces( ), getMethods( ), getFieids( ) возвращают такие же массивы, но не всех, а только открытых членов класса. С помощью методов getEnclosingClass( ) и getEnclosingMethod( ) можно получить экземпляры обрамляющего класса и метода для внутреннего класса. Метод getSuperclass( ) возвращает суперкласс объекта ссылочного типа, getPackage( ) пакет, getModifiers( ) модификаторы (public, protected, …) класса в битовой форме. Модификаторы можно затем расшифровать методами класса java.lang.reflect.Modifier.

Пакет java.lang Класс System(1) Класс System содержит множество полезных статических методов и полей. Экземпляр этого класса не может быть создан или получен. Наиболее широко используемым является стандартный вывод на консоль, доступный через переменную System.out типа PrintStream. Стандартный вывод можно перенаправить в другой поток (файл, массив байт и т.д., главное, чтобы это был объект PrintStream): public static void main( String[ ] args ) { System.out.println( "Begin printing" ); try { PrintStream myOut = new PrintStream( new FileOutputStream( "fileForPrint.txt" ) ); System.setOut( myOut );// перенаправление вывода System.out.println( "End printing" ); } catch( FileNotFoundException e ) { e.printStackTrace( ); } При запуске этого кода на экран будет выведено только Begin printing В файл "fileForPrint.txt" в текущем каталоге будет записано End printing Аналогично могут быть перенаправлены: стандартный ввод System.in – вызовом System.setIn(InputStream); поток вывода сообщений об ошибках System.err – вызовом System.setErr(PrintStream);

Пакет java.lang Класс System(2) Очень полезен метод: public static native void arrayCopy(Object source, int srcPos, Object target, int trgPos, int length) предоставляющий возможность быстрого копирования содержимого одного массива в другой. Первый параметр задает исходный массив, второй – номер позиции, начиная с которого брать элементы для копирования. Третий параметр – массив-«получатель», четвертый – номер позиции в нем, начиная с которого будут записываться скопированные элементы. Наконец, последний параметр задает количество элементов, которые надо скопировать. Оба массива должны быть созданы, иметь совместимые типы и достаточную длину, иначе будут сгенерированы соответствующие непроверяемые исключения. Есть группа методов, позволяющая получать некоторые параметры операционной системы и виртуальной машины Java. Метод public static java.util.Map getenv( ) позволяет получить коллекцию всех переменных окружения операционной системы в виде пар «имя, значение». Фрагмент программы выводит значения этих переменных на консоль: Hashtable htEnv = new Hashtable ( System.getenv( ) ); Enumeration enumEnv = htEnv.keys( ); String currKey; do { currKey = enumEnv.nextElement( ); System.out.println( currKey + " = " + htEnv.get( currKey ) ); } while ( enumEnv.hasMoreElements( ) ); Mетод public static String getenv(String name) возвращает значение одной переменной окружения, указанной аргументом name.

Пакет java.lang Класс System(3) Метод public static Properties getProperties( ) возвращает значения всех доступных приложению свойств виртуальной машины. Вот часть результатов выполнения оператора System.getProperties( ).list( System.out ); : -- listing properties -- java.runtime.name=Java(TM) SE Runtime Environment sun.boot.library.path=C:\Program Files\Java\jre7\bin java.vm.version=23.3-b01 java.vm.vendor=Oracle Corporation path.separator=; java.vendor.url= java.vm.name=Java HotSpot(TM) Client VM … С помощью вызова метода public static void setProperties( Properties props ) можно полностью заменить все свойства виртуальной машины на новые, указанные в аргументе props. Метод public static String getProperty( String key ) возвращает значение системного свойства с именем key. Метод public static String setProperty( String key, String value ) устанавливает новое значение value системного свойства с именем key (возвращается предыдущее значение свойства). С помощью вызова метода public static String clearProperty( String key ) можно удалить системное свойство с именем key (возвращается удаленное значение).

Пакет java.lang Класс System(4) Метод public void loadLibrary( String libName ) загружает библиотеку нативных функций с указанным именем. Если будет произведено несколько вызовов загрузки библиотеки с одним и тем же именем, то фактически выполнен будет только первый, а все остальные будут проигнорированы. Обычно загрузка таких библиотек производится следующим образом: в классе, использующем native-реализации методов, пишется статический инициализатор. Например: static { System.loadLibrary( "LibFile" ); } Таким образом, к моменту, когда класс будет загружен и инициализирован, необходимый код для исполнения native-методов также будет загружен. Метод public void load( String filename ) подгружает файл с указанным названием в качестве библиотеки. В принципе, этот метод работает точно так же, как и метод loadLibrary( ), только принимает в качестве аргумента именно название файла, а не название библиотеки, тем самым позволяя загрузить любой файл с кодом нативных функций.

Пакет java.lang Класс System(5) С помощью вызова метода public static native int identityHashCode( Object object ) можно получить оригинальный хэш-код объекта, вычисляемый (возможно многократно замещенным) методом hashCode( ) класса Object; Метод public static native long currentTimeMillis( ) возвращает текущее время; это значение представляет собой количество миллисекунд, прошедших с 1 января 1970 года. Метод public static native long nanoTime( ) возвращает количество наносекунд, прошедших с момента запуска виртуальной машины. С помощью вызова метода public static void gc( ) можно явным образом запустить сборщик мусора (garbage collector). Метод public static void runFinalization( ) обеспечивает вызов метода finalize( ) у всех объектов, ожидающих финализации (т.е., отмеченных сборщиком мусора, как ненужные и помещенных в соответствующий список). Методы public static SecurityManager getSecurityManager( ) и public static void setSecurityManager( final SecurityManager s ) позволяют получать/устанавливать дополнительные средства контроля безопасности (используемые, например, браузерами при выполнении апплетов). Путем вызова метода public static void exit( int status ) можно завершить исполнение виртуальной машины, а вместе с ней и приложения; аргумент понимается как код завершения ( 0 – нормальное, != 0 – ошибка ).

Пакет java.lang Класс Runtime (1) Класс Runtime содержит некоторые методы взаимодействия приложения с JVM во время выполнения программы. Каждое приложение может получить только один экземпляр данного класса путем вызова статического метода public static Runtime Runtime.getRuntime( ). Все вызовы этого метода всегда возвращают ссылку на один и тот же объект. Класс Runtime содержит ряд методов, имеющихся и в классе System ( gc( ), exit( ), runFinalization( ), load( ), loadLibrary( ) ). Вообще-то методы класса System просто вызывают свои аналоги из класса Runtime. Однако пользоваться немного удобнее именно методами статического класса System (не надо получать экземпляр класса Runtime). Метод public void halt(int status ) осуществляет немедленный останов JVM. Он не завершает запущенные процессы нормальным образом и должен использоваться исключительно в аварийных ситуациях. Методы public native long frееMетоrу( ) и public native long totalMemory( ) возвращают количество свободной и всей памяти, находящейся в распоряжении JVM для размещения объектов, в байтах. Эти значения следует считать справочными, поскольку количество памяти меняется динамически.

Пакет java.lang Класс Runtime (2) Несколько вариантов перегруженного метода ехес (): public Process exec( String command ) public Process exec( String command, String[ ] envVars ) public Process exec( String command, String[ ] envVars, File workDir ) public Process exec( String cmdAndArgs[ ] ) public Process exec( String[ ] cmdAndArgs, String[ ] envVars ) public Process exec( String[ ] cmdAndArgs, String[ ] envVars, File workDir ) запускают в отдельных процессах операционной системы исполняемые файлы. Аргументы этих методов: command – командная строка исполняемого файла; cmdAndArgs – массив строк, нулевым элементом которого является имя исполняемого файла, а остальные – его аргументы командной строки; envVars – массив переменных окружения для создаваемого процесса; workDir – название рабочего каталога создаваемого процесса. Например, Runtime.getRuntime( ).exec( "notepad" ) запускает на платформе MS Windows программу «блокнот» без аргументов командной строки, рабочим каталогом которой будет рабочий каталог родительского процесса. Экземпляр класса Process, возвращаемый любым методом exec, сохраняет связь с созданной дочерней программой и позволяет родительской программе взаимодействовать с ней.

Пакет java.lang Класс Process Методом public void destroy ( ) можно остановить порожденный процесс. Метод public int waitFor( ) приостанавливает родительский процесс до тех пор, пока не закончится запущенный процесс. Метод public int exitValue( ) позволяет получить его код завершения (естественно, в том случае, если не вызывался метод destroy( )). Три метода: public java.io.OutputStream getOutputStream( ), public java.io.InputStream getlnputStream( ), public public java.io.InputStream getErrorStream( ) возвращают входной поток (stdin), выходной поток (stdout), и поток ошибок (stderr) запущенного процесса. Ими можно воспользоваться для организации взаимодействия с дочерней задачей.

Пакет java.lang Класс String (1) Класс String имеет мгого конструкторов: String( ) создается объект с пустой строкой; String( String str ) из одного объекта создается другой (этот конструктор использовать не стоит); String( StringBuffer str ) преобразованная копия объекта класса StringBuffer; String( StringBuilder str ) преобразованная копия объекта класса StringBuilder; String( byte[ ] byteArray ) объект создается из массива байтов byteArray (понимаемых как ASCII-символы); String( char[ ] charArray ) объект создается из массива charArray символов Unicode; String( byte [ ] byteArray, int offset, int count ) объект создается из части массива байтов byteArray, начинающейся с индекса offset и содержащей count байтов; String( char[ ] charArray, int offset, int count ) то же, но массив состоит из двухбайтовых символов Unicode; String( byte[ ] byteArray, String encoding ) символы, записанные в массиве байтов, задаются в Unicode-строке, с учетом кодировки encoding; String( byte[ ] byteArray, int offset, int count, String encoding ) то же самое, но только для части массива. String( byte[ ] byteArray, Charset charset ) символы, записанные в массиве байтов, задаются в Unicode-строке, с учетом кодировки, заданной аргументом charset; String( byte[ ] byteArray, int offset, int count, Charset charset ) то же самое, но только для части массива. Еще есть устаревшие конструкторы, которыми пользоваться не рекомендуется. Многие конструкторы могут выбрасывать исключения при некорректных аргументах.

Пакет java.lang Класс String (2) В качестве строки encoding для кириллицы могут использоваться: "CP1251" – кодировка MS Windows; "CP866" – кодировка MS DOS; "KOI8-R" – кодировка *UNIX; "ISO8859-5" – международная кодировка кириллицы. Независимо от исходной кодировки все строки всегда содержат символы UNICODE. При работе с консолью (метод System.out.println( …)) нужно помнить, что строки, выводимые в консольное окно, должны быть представлены в кодировке MS DOS. Поэтому их нужно явно преобразовывать в нужную кодировку, например, так: String str = "Россия";// строка UNICODE try{ System.out.println( str + "\n" + new String(str.getBytes("CP866"), "CP1251") ); } catch( Exception e ){ System.out.println( e.toString( ) ); } Вот что появится в результате на консоли: юёёш Россия// это строка, полученная двойным преобразованием. Сначала // UNICODE -> массив байтов в кодировке CP866, потом этот массив // байтов снова в UNICODE, но с использованием кодировки CP1251 // В процессе вывода на консоль эта UNICODE-строка еще раз // преобразовывается, но уже в кодировку CP866

Пакет java.lang Класс String (3) Класс String имеет большое количество методов, из которых два статических метода: public static String copyValueOf( char[ ] charArray ) public static String copyValueOf( char[ ] charArray, int offset, int count ) по существу представляют собой еще два способа создать строку. Пример: char[ ] symbols = { 'с', 'и', 'м', 'в', 'о', 'л', 'ь', 'н', 'ы', 'й', ' ', 'м', 'а', 'с', 'с', 'и', 'в', '.',}; String fullString = String.copyValueOf( symbols );// "символьный массив." String partString = String.copyValueOf( symbols, 11, 6 );// "массив" Конечно, использовать эти методы с литералами смысла не имеет, однако эти методы удобно применять, если символьные UNICODE-массивы читаются из файлов или поступают из сети. Для большинства типов есть статический метод преобразования значения в строку: static public String valueOf( … ): static public String valueOf( boolean booleanValue ) static public String valueOf( char charValue ) static public String valueOf( char[ ] charArray ) static public String valueOf( char[ ] charArray, int offset, int count ) static public String valueOf( int intValue ) static public String valueOf( long longValue ) static public String valueOf( float floatValue ) static public String valueOf( double doubleValue ) static public String valueOf( Object objectValue )

Пакет java.lang Класс String (4) Операции со строками. Для строк в Java перегружен знак операции +, означающий конкатенацию: System.out.println( "Current time in milliseconds: " + System.currentTimeMillis ); Выведено будет что-то вроде: Current time in milliseconds: Знаки операций сложения и конкатенации выполняются слева направо: System.out.println( "0" );// 012 System.out.println( "0" + (1 + 2) );// 03 System.out.println( "0");// 30 Есть еще один способ выполнить конкатенацию строк – вызвать метод: public String concat( String anyString) // anyString прицепляется в конец Удалить начальные и завершающие пробелы, табуляции, … можно методом: public String trim( )// возвращает новый экземпляр строки Узнать длину строки можно с помощью метода: public int length( ) Получить подстроку: public String( int beginIndex ) public String( int beginIndex, int endIndex ) Для сравнения двух строк можно использовать методы: public int compareTo( String anyString )// -1: currentString < anyString, 0: ==, … public int compareToIgnoreCase( String anyString )// не регистро-чувствительный

Пакет java.lang Класс String (5) Сравнить подстроку данной строки с подстрокой точно такой же длины другой строки можно методом: public boolean regionMatches( int indThis, String otherStr, int indOther, int len ) Здесь: indThis – индекс начала подстроки внутри данной строки; otherStr – другая строка; indOther – индекс начала подстроки внутри другой строки otherStr len – длина сравниваемых подстрок. Результат false получается в следующих случаях: хотя бы один из индексов indThis или indOther отрицателен; хотя бы одно из indThis + len или indOther + len больше длины соответствующей строки; хотя бы одна пара символов не совпадает. Этот метод различает символы, записанные в разных регистрах. Если надо сравнивать подстроки без учета регистров букв, то следует использовать метод: public boolean regionMatches( boolean flag, int indThis, String otherStr, int indOther, int len) Если первый аргумент равен true, то регистр букв при сравнении подстрок не учитывается, если false – учитывается. Выяснить, удовлетворяет ли строка в целом шаблону поиска заданного регулярного выражения, можно с помощью метода: public boolean matches( String regex )

Пакет java.lang Класс String (6) Строку можно сравнить на эквивалентность по содержимому с экземплярами интерфейса CharSequence и класса StringBuffer: public boolean contentEquals( CharSequence cs ) public boolean contentEquals( StringBuffer sb ) Можно узнать, содержится ли заданная последовательность символов в строке: public boolean contains( CharSequence cs ) Можно узнать, начинается ли строка с другой строки и заканчивается ли она ею: public boolean endsWith( String suffix ) public boolean startsWith( String prefix ) public boolean startsWith( String prefix, int startOffset ) Например, оператор: System.out.println( "Russia".startsWith( "ss", 2) ); выведет true. Символы строки можно преобразовать в нижний/верхний регистр (предполагается использование текущей локализации): public String toLowerCase( ) public String toUpperCase( ) То же самое можно сделать и на основе заданной локали: public String toLowerCase( Locale locale ) public String toUpperCase( Locale locale )

Пакет java.lang Класс String (7) Можно узнать индексы первого и последнего вхождения символа/строки в данную строку, в том числе – указав точку начала поиска. Возвращаемый индекс имеет отрицательное значение, если искомого вхождения нет. Если же оно положительно, то этот индекс отсчитывается всегда с начала строки. public int indexOf(int ch) public int indexOf(int ch, int fromIndex) public int indexOf(String str) public int indexOf(String str, int fromIndex) public int lastIndexOf(int ch) public int lastIndexOf(int ch, int fromIndex) public int lastIndexOf(String str) public int lastIndexOf(String str, int fromIndex) Например: "Russia".indexOf( 's' );// 2 "Russia".indexOf( 's', 3);// -1 "Russia".lastIndexOf( 's' );// 3 "Russia".lastIndexOf( 's', 2 );// 2

Пакет java.lang Класс String (8) Получить символ из заданной позиции в строке можно с помощью метода: public char charAt( int index ) Получить код символа из заданной позиции в строке можно с помощью метода: public int codePointAt( int index ) Получить код символа из позиции, предшествующей заданной в строке, можно с помощью метода: public int codePointBefore( int index ) Следующий метод преобразовывает строку в байтовый массив с использованием текущего charset'a, определенного текущей локализацией: public byte[ ] getBytes( ) Следующий метод преобразовывает строку в байтовый массив с использованием заданного charset'a: public byte[ ] getBytes( Charset charset ) Следующий метод преобразовывает строку в байтовый массив с использованием имени заданного charset'a: public byte[ ] getBytes( String charsetName ) Преобразование строки в новый символьный массив выполняет метод: public char[ ] toCharArray( ) То же самое, но с записью в существующий символьный массив и с указанием начального и конечного индексов символов в строке, а также начальной позиции: public void getChars( int srcBegin, int srcEnd, char[ ] dst, int dstBegin )

Пакет java.lang Класс String (9) Для получения новых строк путем замены одних подстрок на другие есть группа методов. Заменяет все вхождения символа oldChar на символ newChar метод: public String replace( char oldChar, char newChar ) Каждую подстроку, совпадающую с первым аргументом, заменяет на заданную подстроку второго аргумента метод: public String replace( CharSequence target, CharSequence replacement ) То же самое делает следующий метод, но только заменяются все подстроки, соответствующие шаблону поиска заданного регулярного выражения: public String replaceAll(String regex, String replacement) Следующий метод заменяет вторым аргументом только первую подстроку, соответствующую шаблону поиска первого аргумента: public String replaceFirst(String regex, String replacement) Следующие два метода разбивают строку на массив строк, ограниченных подстрокой (эти подстроки не входят в результат), удовлетворяющей шаблону поиска заданного регулярного выражения (во втором методе вторым аргументом сверху ограничен размер возвращаемого массива): public String[ ] split( String regex ) public String[ ] split( String regex, int limit ) Например, в результате выполнения оператора: String[ ] arr = "ab1sss2xcv3a e45sss 6ddd".split( "[0-9]" ); будет получен массив: { "ab", "sss", "xcv", "a e", "", "sss", "ddd"}

Пакет java.lang Класс String (10) И, наконец, вкратце сведения о возможностях, предоставляемых классом String для подготовки форматного вывода данных (в том числе на консоль). Есть два статических метода, которые преобразуют строку format и неопределенное заранее количество аргументов Object…args в строку, не содержащую параметров форматирования. Вместо них подставлены значения соответствующих аргументов args. Второй метод отличается от первого наличием явно заданной локали. public static String format( String format, Object... args ) public static String format( Locale locale, String format, Object... args ) Способы задания параметров форматирования во многом унаследованы из языка С. Каждый параметр форматирования начинается с символа % и может включать в себя несколько составных частей: %[argument_index$][flags][width][.precision]conversion Здесь: argument_index$ – порядковый номер аргумента для преобразования (нумерация аргументов метода начинается с 0, для первого варианта метода строка format – это аргумент с номером 0); flags – флаги, управляющие представлением чисел ("-" – выравнивание по левому краю, "0" – заполнение лидирующими нулями, "+" – обязательность знака, …); width – ширина представления значения в символах;.precision – количество символов в дробной части числа с плавающей точкой; conversion – символ способа представления значения ("d" – целое число в десятичном представлении, "s" – строковое представление, …)