В следующем примере показано, как обращаться к методам динамически с помощью отражения.


import java.lang.reflect.*;

import java.io.*;



public class testReflect {

   public static void main(String s[]) {

      testReflect t = new testReflect();

      try {

         t.doit();

         }

      catch (Exception e) {

         e.printStackTrace();

         }

      }

   public void doit() throws Exception {

      String aClass;

      String aMethod;   

      // we assume that called methods have no argument

      Class params[] {};

      Object paramsObj[] {};

      

      while (true) {

         /* examples 

            Class: class1         Method: class1Method2

            Class: java.util.Date Method: toString

            Class: java.util.Date Method: getTime

         */

         aClass  = Input.Line("\nClass : ");

         aMethod = Input.Line("Method: ");

         // get the Class

         Class thisClass = Class.forName(aClass);

         // get an instance 

         Object iClass = thisClass.newInstance();

         // get the method

         Method thisMethod = thisClass.getDeclaredMethod(aMethod, params);

         // call the method

         System.out.println(thisMethod.invoke(iClass, paramsObj).toString());

         }

      }

   

   static class Input {

     public static String Line(String sthrows IOException {

         BufferedReader input = 

             new BufferedReader(new InputStreamReader(System.in));

         System.out.print(s);

         return input.readLine();     

        }

     }

}



class class1 {

   public String class1method1() {

      return "*** Class 1, Method1 ***";

      }

   public String class1method2() {

      return "### Class 1, Method2 ###";

      }

}

Следующий пример вызывает метод класса с 2 аргументами:


import java.lang.reflect.*;



public class TestReflect {

  static void invoke(String aClass, String aMethod, Class[] params, Object[] args) {

    try {

      Class c = Class.forName(aClass);

      Method m = c.getDeclaredMethod(aMethod, params);      

      Object i = c.newInstance();

      Object r = m.invoke(i, args);

      

    catch (Exception e) {

      e.printStackTrace();

      

    }



  public static void main(String[] args) {

    invoke("Class1""say"new Class[] {String.class, String.class}

           new Object[] 

             {new String("Hello")new String("World")});

    }

}



class Class1 {

  public void sayString s1, String s2) {

    System.out.println(s1 + " " + s2);

    }

}   

Font Metrics

Этот совет Java Swing иллюстрирует способ получения FontMetrics различные шрифты. FontMetrics, как правило, используется для получения информации о ширине и высоте символов и строк при составлении текста на поверхность. FontMetrics ссылки на объект шрифта и поверхность, так как шрифты могут иметь различные метрики на различных поверхностях.


import java.awt.*;

import java.awt.event.*;

import javax.swing.*;



public class Metrics extends JFrame {

    

    public Metrics() {

        super"Demonstrating FontMetrics" );

        

        setSize510210 );

        show();

    }

    

    public void paintGraphics g ) {

        

        g.setFontnew Font"SansSerif", Font.BOLD, 12 ) );

        FontMetrics fm = g.getFontMetrics();

        g.drawString"Current font: " + g.getFont()1040 );

        g.drawString"Ascent: " + fm.getAscent()1055 );

        g.drawString"Descent: " + fm.getDescent()1070 );

        g.drawString"Height: " + fm.getHeight()1085 );

        g.drawString"Leading: " + fm.getLeading()10100 );

        

        Font font = new Font"Serif", Font.ITALIC, 14 );

        fm = g.getFontMetricsfont );

        g.setFontfont );

        g.drawString"Current font: " + font, 10130 );

        g.drawString"Ascent: " + fm.getAscent()10145 );

        g.drawString"Descent: " + fm.getDescent()10160 );

        g.drawString"Height: " + fm.getHeight()10175 );

        g.drawString"Leading: " + fm.getLeading()10190 );

    }

    

    public static void mainString args[] ) {

        Metrics app = new Metrics();

        

        app.addWindowListener(

                new WindowAdapter() {

            public void windowClosingWindowEvent e ) {

                System.exit);

            }

        }

        );

    }

}

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

Java использовать Clone () класса объекта, чтобы скопировать содержание одного объекта к другому. Проблема прибудет если класс, который должен быть скопирован также содержит ссылку на другой объект.

Классы могут Cloneable реализующий интерфейс перекрывает Clone () метод класса объекта.

Следующий пример покажет, порядок осуществления Cloneable интерфейса.


public class CloneExp implements Cloneable {



  private String name;

  private String address;

  private int age;

  private Department depart;

  public CloneExp(){

    

  }

  public CloneExp(String aName, int aAge, Department aDepart) {



    this.name = aName;

    this.age = aAge;

    this.depart = aDepart;

  }



  protected Object clone() throws CloneNotSupportedException {



    CloneExp clone=(CloneExp)super.clone();



    // make the shallow copy of the object of type Department

    clone.depart=(Department)depart.clone();

    return clone;



  }

  public static void main(String[] args) {



    CloneExp ce=new CloneExp();



    try {

      // make deep copy of the object of type CloneExp

      CloneExp cloned=(CloneExp)ce.clone();

    catch (CloneNotSupportedException e) {

      e.printStackTrace();

    }

    

  }

Сначала необходимо создать экземпляр класса Случайная:


   Random random = new Random();

Затем, вы можете получить случайное число, по телефонам:


   int pick = random.nextInt(maxvalue);

Это будет означать, значения от 0 (включительно) до MaxValue (эксклюзивные).

Для более сильного криптографического генератора псевдослучайных вы можете проверить java.security.SecureRandom класс. При этом абонент может указать имя алгоритма и (опционально) пакет услуг. Вот пример кода использования SecureRandom класс:


   SecureRandom random = SecureRandom.getInstance("SHA1PRNG")

   random.setSeed(seed)

   int randInt = random.nextInt(maxvalue);

Этот совет Java demostrates Как подготовить список всех доступных шрифтов семей. Семья может быть описана как группы всех шрифтов с аналогичным или связанным типографского дизайна. Например, шрифт лица в семье Lucida Sans Typewriter может быть Lucida Sans Typewriter Bold, и Lucida Sans Typewriter Regular. Для разработчика информацию J2SE 1.4 поддерживает только шрифты True Type.


    // Get names of all the font families

    GraphicsEnvironment environment = 

      GraphicsEnvironment.getLocalGraphicsEnvironment();

    String fontNames[] = environment.getAvailableFontFamilyNames();

    

    // A for loop for Iterating through all the font family names

    for (int i=0; i<fontNames.length; i++) {



        System.out.println(fontNames[i]);



        // Aria

        // Comic Sans MS

        // Verdana

        // ...

    }

Условная операция может быть выполнена с использованием либо короткое замыкание булевы операторы (

Но всегда лучше использовать короткие операторы схеме из-за быстрой обработки.

For example:
Operation 1: condition1 && condition2
Operation 2: condition1 & condition2

В operation1 первый компилятор будет проверять condition1 а если оно ложно то он не будет проверять condition2 и дать ложный результат.

В Operation2 компилятор будет проверить как условия, прежде чем давать результат.

the appearance of a component

Этот совет Java Swing иллюстрирует метод динамического обновления появления компонента. Подсказка использует раз подтверждают () для динамического обновления появления компонента. Этот пример изменения размера шрифта кнопки на лету.


import javax.swing.*;

import java.awt.*;

import java.awt.event.*;



public class RevalidateExample extends JFrame {

    

    public RevalidateExample() {

        

        super("Revalidation Demo");

        setSize(300,150);

        setDefaultCloseOperation(EXIT_ON_CLOSE);

        

        // Create a single button

        Font font = new Font("Dialog", Font.PLAIN, 10);

        final JButton b = new JButton("Add");

        b.setFont(font);

        

        Container c = getContentPane();

        c.setLayout(new FlowLayout());

        c.add(b);

        

        // Increase the size of the button's font each time it's clicked

        b.addActionListener(new ActionListener() {

            int size = 10;

            

            public void actionPerformed(ActionEvent ev) {

                b.setFont(new Font("Dialog", Font.PLAIN, ++size));

    

    // invalidates the button & validates its root pane

                b.revalidate();   

            }

        });

    }

    

    public static void main(String[] args) {

        RevalidateExample re = new RevalidateExample();

        re.setVisible(true);

    }

}

Ths Java советы иллюстрирует метод преобразования между ByteBuffer и массива байтов. Иногда разработчику необходимо данные в ByteBufer, которые будут использоваться в массиве формат. Этот совет может помочь разработчикам, чтобы решить эту проблему.


    // Create a ByteBuffer from a byte array

    byte[] bytes = new byte[10];

    ByteBuffer buffer = ByteBuffer.wrap(bytes);

    

    // Retrieve bytes between the position and limit

    bytes = new byte[buffer.remaining()];

    buffer.get(bytes, 0, bytes.length);

    

    // Retrieve all bytes in the buffer

    buffer.clear();

    bytes = new byte[buffer.capacity()];

    buffer.get(bytes, 0, bytes.length);

Этот совет Java демонстрирует метод рисования различные формы на компоненту с помощью комбинации других формах. Различные формы может быть сделан разработчиком перезаписи Paint () функцию компонента.


    // Create a new shape

    Area shape = new Area(shape1);

    

    // Add shape to shape 2

    shape.add(new Area(shape2));

    

    // Subtract shape with shape 3

    shape.subtract(new Area(shape3));

    shape.intersect(new Area(shape4));

    shape.exclusiveOr(new Area(shape5));