Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Использование пакетов, директив импорта и переменной среды CLASSPATH




Использование пакетов, директив импорта и переменной среды CLASSPATH

Практика:

Разбор параметров командной строки

 

ДЕНЬ 3

File Modifier

Атрибут final у членов данных означает, что их значение запрещено менять или другими словами определяет константы. Если финальный член данных не инициализирован при определении, то его значение необходимо указать в конструкторах. Такая альтернатива переменным членам данных может ускорить работу приложения.

Атрибут final у методов означает отмену их виртуальности - возможности переопределения в дочерних классах. Использование этого атрибута может ускорить работу приложения (как inline в  С++).

Атрибут final можно применить ко всему классу для запрещения наследования от него. Таковыми, например, являются некоторые стандартные классы.

 

Запрещаем полиморфизм если (слайд 26, mod 6-9)

 

Абстрактные классы и методы

Мы можем сделать любой класс абстрактным

1. нельзя создавать объект абстрактного класса

2. в абстрактном классе можно размещать абстрактные методы

 

 
 
 

 

 

ЛАБА №3

package javaapplication1;   public class ComLineParserBase { private String[] keys;       // ключи private String[] delimeters; // разделители " /", " -"   protected enum SwitchStatus { NoError, Error, ShowUsage };   public ComLineParserBase(String[] keys) {    this(keys, new String[] { " /", " -" }); } public ComLineParserBase(String[] keys, String[] delimeters) {    this. keys = keys;    this. delimeters = delimeters; }   protected void OnUsage(String errorKey){ //   if (errorKey! = null) //       System. out. println(" Command-line switch error: " + errorKey); // //   System. out. println(" формат ком. строки: имяПрограммы [-r< input-fileName> ] [-w< output-fileName> ]" ); // System. out. println(" -? показать Help файл" ); // System. out. println(" -r задать имя входного файла" ); // System. out. println(" -w выполнить вывод в указанный файл" ); } protected SwitchStatus OnSwitch(String key, String keyValue) {    return SwitchStatus. Error; }   public Boolean Parse(String[] args) {    SwitchStatus ss = SwitchStatus. NoError;            int argNum;     for (argNum = 0; (ss == SwitchStatus. NoError) & & (argNum < args. length); argNum++) {          // провера наличия правильного разделителя        boolean isDelimeter = false;        for (int n = 0; ! isDelimeter & & (n < delimeters. length); n++) {            isDelimeter = args[argNum]. regionMatches(0, delimeters[n], 0, 1);        }                    if (isDelimeter) {            // проверка наличия правильного ключа            Boolean isKey = false;            int i;            for (i = 0; ! isKey & & (i < keys. length); i++) {                isKey = args[argNum]. toUpperCase(). regionMatches(1,                        keys[i]. toUpperCase(), 0, keys[i]. length());                if (isKey) break;            }            if (! isKey) {                ss = SwitchStatus. Error;                break;            }            else {                ss = OnSwitch(keys[i]. toLowerCase(),                     args[argNum]. substring(1 + keys[i]. length()));            }        }        else {            ss= SwitchStatus. Error;            break;        }    }    // завершение разбора командной строки    if (ss == SwitchStatus. ShowUsage) OnUsage(null);    if (ss == SwitchStatus. Error)   OnUsage((argNum == args. length)? null: args[argNum]);            return ss == SwitchStatus. NoError; }      }
public class SimpleParser extends ComLineParserBase { private String inFile; private String outFile;     public String getInFile() { return inFile; } public String getOutFile() { return outFile; }     public SimpleParser(){    super(new String[]{"? ", " r", " w" }); } @Override protected void OnUsage(String errorKey){    if (errorKey! = null)        System. out. println(" Command-line switch error: " + errorKey);      System. out. println(" формат ком. строки: имяПрограммы [-r< input-fileName> ] [-w< output-fileName> ]" ); System. out. println(" -? показать Help файл" ); System. out. println(" -r задать имя входного файла" ); System. out. println(" -w выполнить вывод в указанный файл" ); } @Override protected SwitchStatus OnSwitch(String key, String keyValue) {    SwitchStatus status = SwitchStatus. NoError;            switch (key) {         case "? ": status = SwitchStatus. ShowUsage; break;        case " r":               if (keyValue. length() < 1) {                System. out. println(" Нет имени входного файла. " );                status = SwitchStatus. Error;            }            else inFile = keyValue;            break;        case " w":               if (keyValue. length() < 1) {                System. out. println(" Нет имени выходного файла. " );                status = SwitchStatus. Error;            }            else outFile = keyValue;            break;        default: status = SwitchStatus. Error; break;    }    return status; }    }
/*  * To change this license header, choose License Headers in Project Properties.  * To change this template file, choose Tools | Templates  * and open the template in the editor.  */   package lab. pkg3;   /**  *  * @author Student  */ public class Lab3 {   /** * @param args the command line arguments */ public static void main(String[] args) {    // TODO code application logic here   javaapplication1. SimpleParser sp1 = new javaapplication1. SimpleParser();   sp1. Parse(args);   System. out. println(sp1. Get_inFile());   System. out. println(sp1. Get_outFile());        }     }

 

 

Слайд 31

Практика

– массив объектов

– сортировка

– стандартные интерфейсы

package app. pkg20. pkg1;   import java. util. Arrays;   public class App201 {   public static void main(String[] args) {    // TODO code application logic here    int []data = {2, 5, 1, 8, 11, 7};    Arrays. sort(data);    for(int di: data)    {        System. out. println(di);    }  }     }
СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)
 

 

package app. pkg20. pkg1;   import java. util. Arrays;   class Box { private int a, b;   public Box(int a, int b) {    this. a = a;    this. b = b; }   @Override public String toString() {    return " a=" +a+" b=" +b; } }   public class App201 {   public static void main(String[] args) {    // TODO code application logic here    //int []data = {2, 5, 1, 8, 11, 7};    Box []data = {new Box(4, 7), new Box(2, 1), new Box(3, 2), new Box(6, 4), new Box(3, 6)};   // Arrays. sort(data);    for(Box di: data)    {        System. out. println(di);    } }     }
run: a=4 b=7 a=2 b=1 a=3 b=2 a=6 b=4 a=3 b=6 СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

 

package app. pkg20. pkg1;   import java. util. Arrays;   class Box { private int a, b;   public Box(int a, int b) {    this. a = a;    this. b = b; }   @Override public String toString() {    return " a=" +a+" b=" +b; } }   public class App201 {   public static void main(String[] args) {    // TODO code application logic here    //int []data = {2, 5, 1, 8, 11, 7};    Box []data = {new Box(4, 7), new Box(2, 1), new Box(3, 2), new Box(6, 4), new Box(3, 6)};    Arrays. sort(data);    for(Box di: data)    {        System. out. println(di);    } }     }
run: Exception in thread " main" java. lang. ClassCastException: app. pkg20. pkg1. Box cannot be cast to java. lang. Comparable at java. util. ComparableTimSort. countRunAndMakeAscending(ComparableTimSort. java: 316) at java. util. ComparableTimSort. sort(ComparableTimSort. java: 184) at java. util. Arrays. sort(Arrays. java: 1244) at app. pkg20. pkg1. App201. main(App201. java: 25) Java Result: 1 СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

 

 

Для того тобы роеализация началась….

package app. pkg20. pkg1;   import java. util. Arrays;   class Box implements Comparable { private int a, b;   public Box(int a, int b) {    this. a = a;    this. b = b; }   @Override public String toString() {    return " a=" +a+" b=" +b; }   @Override public int compareTo(Object obj) {   Box b1 = this;   Box b2 = (Box)obj;   return b1. a*b1. b - b2. a*b2. b; } }   public class App201 {   public static void main(String[] args) {    // TODO code application logic here    //int []data = {2, 5, 1, 8, 11, 7};    Box []data = {new Box(4, 7), new Box(2, 1), new Box(3, 2), new Box(6, 4), new Box(3, 6)};    Arrays. sort(data);    for(Box di: data)    {        System. out. println(di);    } }     }
run: a=2 b=1 a=3 b=2 a=3 b=6 a=6 b=4 a=4 b=7 СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

 

 

Вариант с final

package app. pkg20. pkg1;   import java. util. Arrays;   class Box implements Comparable { private int a, b;   public Box(int a, int b) {    this. a = a;    this. b = b; }   @Override public String toString() {    return " a=" +a+" b=" +b; }   @Override final public int compareTo(Object obj) {   Box b1 = this;   Box b2 = (Box)obj;   return b1. a*b1. b - b2. a*b2. b; } }   public class App201 {   public static void main(String[] args) {    // TODO code application logic here    //int []data = {2, 5, 1, 8, 11, 7};    Box []data = {new Box(4, 7), new Box(2, 1), new Box(3, 2), new Box(6, 4), new Box(3, 6)};    Arrays. sort(data);    for(Box di: data)    {        System. out. println(di);    } }     }
run: a=2 b=1 a=3 b=2 a=3 b=6 a=6 b=4 a=4 b=7 СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

 

 

 

 

 

package app. pkg20. pkg1;   import java. util. Arrays; import java. util. Comparator;   class Box implements Comparable { private int a, b;   public Box(int a, int b) {    this. a = a;    this. b = b; }   @Override public String toString() {    return " a=" +a+" b=" +b; }   @Override final public int compareTo(Object obj) {   Box b1 = this;   Box b2 = (Box)obj;   return b1. a*b1. b - b2. a*b2. b; } static class CompareBoxBySizeA implements Comparator{      @Override    public int compare(Object obj1, Object obj2) {        Box b1 = (Box)obj1;        Box b2 = (Box)obj2;        return b1. a - b2. a;    }    } static class CompareBoxBySizeB implements Comparator{      @Override    public int compare(Object obj1, Object obj2) {        Box b1 = (Box)obj1;        Box b2 = (Box)obj2;        return b1. b - b2. b;    }    } }   //class CompareBoxBySizeB{ //    //} public class App201 {   public static void main(String[] args) {    // TODO code application logic here    //int []data = {2, 5, 1, 8, 11, 7};    Box []data = {new Box(4, 7), new Box(2, 1), new Box(3, 2), new Box(6, 4), new Box(3, 6)};    Arrays. sort(data, new Box. CompareBoxBySizeB());    for(Box di: data)    {        System. out. println(di);    } }     }
run: a=2 b=1 a=3 b=2 a=6 b=4 a=3 b=6 a=4 b=7 СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

 

package app. pkg20. pkg1;   import java. util. Arrays; import java. util. Comparator;   class Box implements Comparable { private int a, b;   public Box(int a, int b) {    this. a = a;    this. b = b; }   @Override public String toString() {    return " a=" +a+" b=" +b; }   @Override final public int compareTo(Object obj) {   Box b1 = this;   Box b2 = (Box)obj;   return b1. a*b1. b - b2. a*b2. b; } public static Comparator bySideA(){    return new CompareBoxBySizeA(); } public static Comparator bySideB(){    return new CompareBoxBySizeB(); } private static class CompareBoxBySizeA implements Comparator{      @Override    public int compare(Object obj1, Object obj2) {        Box b1 = (Box)obj1;        Box b2 = (Box)obj2;        return b1. a - b2. a;    }    } private static class CompareBoxBySizeB implements Comparator{      @Override    public int compare(Object obj1, Object obj2) {        Box b1 = (Box)obj1;        Box b2 = (Box)obj2;        return b1. b - b2. b;    }    } }   //class CompareBoxBySizeB{ //    //} public class App201 {   public static void main(String[] args) {    // TODO code application logic here    //int []data = {2, 5, 1, 8, 11, 7};    Box []data = {new Box(4, 7), new Box(2, 1), new Box(3, 2), new Box(6, 4), new Box(3, 6)};    //Arrays. sort(data, new Box. CompareBoxBySizeB());    Arrays. sort(data, Box. bySideA());    for(Box di: data)    {        System. out. println(di);    }    System. out. println(" \n" );            Arrays. sort(data, Box. bySideB());    for(Box di: data)    {        System. out. println(di);    } }     }
run: a=2 b=1 a=3 b=2 a=3 b=6 a=4 b=7 a=6 b=4     a=2 b=1 a=3 b=2 a=6 b=4 a=3 b=6 a=4 b=7 СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

 

Как развить существующий интерфейс?

– просто добавить методов; - НЕ ГОДИТСЯ

– наследовать и добавить методов; - не самый лучший способ

– добавить default методы;

– добавить static методы;

 

АННОТАЦИИ – метаданные о коде

@Override

@Deprecated

@SuppressWarnings

@Retention & @Target

@FunctionalInterface

Зачем это нужно?

Аннотации позволяют сообщить дополнительную информацию о коде

@Deprecated – компилятор выдаст предупреждение, что я использую устаревший код. Это рассчитано на этапе компиляции.

@Override – метод переопределен

@Retention(value=RetentionPolicy. RUNTIME) @Target(value=ElementType. TYPE) public @interface Developer { String fname(); String type()  default “tester”; String data(); String version() default “1. 0. 1. 0”; } @Developer(fname=“alex”, data=“3/11/2014”) public class Test{}

 

Слайд 32 Java. lang

 

Сборщик мусора

 

Клонирование

 

 

boolean equals (Object obj)

==

Или! =

 

Class getClass ()

РЕФЛЕКСИЯ –

package app. pkg20. pkg1;   import java. lang. reflect. Method; import java. util. Arrays; import java. util. Comparator;   class Box implements Comparable { private int a, b;   public Box(int a, int b) {    this. a = a;    this. b = b; }   @Override public String toString() {    return " a=" +a+" b=" +b; }   @Override final public int compareTo(Object obj) {   Box b1 = this;   Box b2 = (Box)obj;   return b1. a*b1. b - b2. a*b2. b; } public static Comparator bySideA(){    return new CompareBoxBySizeA(); } public static Comparator bySideB(){    return new CompareBoxBySizeB(); } private static class CompareBoxBySizeA implements Comparator{      @Override    public int compare(Object obj1, Object obj2) {        Box b1 = (Box)obj1;        Box b2 = (Box)obj2;        return b1. a - b2. a;    }    } private static class CompareBoxBySizeB implements Comparator{      @Override    public int compare(Object obj1, Object obj2) {        Box b1 = (Box)obj1;        Box b2 = (Box)obj2;        return b1. b - b2. b;    }    } }   //class CompareBoxBySizeB{ //    //} public class App201 {   public static void main(String[] args) {    // TODO code application logic here    //int []data = {2, 5, 1, 8, 11, 7};    Box []data = {new Box(4, 7), new Box(2, 1), new Box(3, 2), new Box(6, 4), new Box(3, 6)};    //Arrays. sort(data, new Box. CompareBoxBySizeB());    Arrays. sort(data, Box. bySideA());    for(Box di: data)    {        System. out. println(di);    }    System. out. println(" \n" );            Arrays. sort(data, Box. bySideB());    for(Box di: data)    {        System. out. println(di);    }                        //Пример про рефлексию    Class info = data[0]. getClass();    Method[]ms = info. getMethods();    for(Method mi: ms)    {        System. out. println(mi);    }        }    }
public static java. util. Comparator app. pkg20. pkg1. Box. bySideA() public static java. util. Comparator app. pkg20. pkg1. Box. bySideB() public java. lang. String app. pkg20. pkg1. Box. toString() public final int app. pkg20. pkg1. Box. compareTo(java. lang. Object) public final void java. lang. Object. wait() throws java. lang. InterruptedException public final void java. lang. Object. wait(long, int) throws java. lang. InterruptedException public final native void java. lang. Object. wait(long) throws java. lang. InterruptedException public boolean java. lang. Object. equals(java. lang. Object) public native int java. lang. Object. hashCode() public final native java. lang. Class java. lang. Object. getClass() public final native void java. lang. Object. notify() public final native void java. lang. Object. notifyAll() СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

 

 

 

 

//Math math = new Math(); error

 

Работа с ошибками

Законы Мерфи. В программах есть ошибки. На них нужно реагировать.

Try – catch – finally

try – это защищенный блок

 

s1();

s2();

finally – по окончанию try всегда вызывается finally

Как не надо писать catch

try {... }

catch(SomeExceptionClass e) { }

catch(AnotherExceptionClass e) {... }

 

 

 

 

 

 

 

 

ПРАКТИКА - mod11-13

ПОТОКИ ДАННЫХ

в версии Java 1. 1 появился дополнительный набор классов, основывающийся на типах Reader и Writer. Эта иерархия очень схожа с аналогичной для байтовых потоков InputStream и OutputStream. Главное отличие между ними – Reader и Writer работают с потоком символов (char). Только чтение массива символов в Reader описывается методом read(char[]), а запись в Writer – write(char[]).

Байтовый поток Символьный поток

InputStream       Reader

OutputStream Writer

ByteArrayInputStream CharArrayReader

ByteArrayOutputStream CharArrayWriter

Нет аналога        InputStreamReader

Нет аналога        OutputStreamWriter

FileInputStream FileReader

FileOutputStream FileWriter

FilterInputStream FilterReader

FilterOutputStream FilterWriter

BufferedInputStream BufferedReader

BufferedOutputStream BufferedWriter

PrintStream         PrintWriter  

DataInputStream Нет аналога

DataOutputStream Нет аналога

ObjectInputStream Нет аналога

ObjectOutputStream   Нет аналога

PipedInputStream PipedReader

PipedOutputStream PipedWriter

StringBufferInputStream StringReader

Нет аналога        StringWriter

LineNumberInputStream LineNumberReader

PushBackInputStream PushBackReader   

SequenceInputStream Нет аналога

flush – сохраняет инфу на жёсткий диск из буфера оперативной памяти

try { fin = new BufferedInputStream(new FileInputStream(args[0])); fout = new BufferedOutputStream(new FileOutputStream(args[1])); // Copy the file. // Because buffered streams are used, the // read and write operations are automatically // buffered, which results in higher performance. int i; do {         i = fin. read();         if(i! = -1) fout. write(i); } while(i! = -1); } catch(IOException exc) {System. out. println(" File Error" ); } finally { fin. close();    fout. close(); }  

 

 

Практика

package app. pkg20. pkg2;   import java. io. *;   public class App202 {   public static void main(String[] args) {    // TODO code application logic here    //double []data = {1e2, 5, 1. 07, 2. 14, 100. 2};           // save(data, " data. txt" );            load(" data. txt" ); //мы пишем }     static void save(double[] d, String name) {    try(    DataOutputStream dos = new DataOutputStream(            new BufferedOutputStream(                    new FileOutputStream(name)))){        for(double di: d) dos. writeDouble(di);                }    catch(FileNotFoundException ex) {ex. printStackTrace(); }    catch(IOException ex) {ex. printStackTrace(); }    finally {        System. out. println(" end of save" );    } } static void load(String datatxt) {    try(    DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(datatxt)))){        while(true)        {            System. out. println(dis. readDouble());                        }           }    catch(EOFException ex){System. out. println(" end of read" ); } //выделил как отдельный случай конца файла    catch(IOException ex) {ex. printStackTrace(); } }    }
run: 100. 0 5. 0 1. 07 2. 14 100. 2 end of read СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

http: //www. javadecompilers. com/

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...