Эта подсказка показывает различные аспекты создания буфера изображений в памяти. Разработчик может сохранять изображения в буфере памяти, а затем отображает его на экране. Буфер изображений не имеет ограничений по формату изображения, оно может храниться в любом формате. Как правило, разработчик может изменять пикселей Buffered в соответствии со своими потребностями.


    int width = 100;

    int height = 100;

    

    // No.1 How to create buffered image 

    // that does not support transparency    

    BufferedImage bufimage = new BufferedImage(width, height, 

      BufferedImage.TYPE_INT_RGB);



    // OR

    // No.2 How to create a buffered image 

    // that supports transparency    

    bufimage = new BufferedImage(width, height, 

      BufferedImage.TYPE_INT_ARGB);



    //No.3 How to create buffered images 

    // that are compatible with the screen

    GraphicsEnvironment environment = 

      GraphicsEnvironment.getLocalGraphicsEnvironment();

    

    GraphicsDevice device = 

      environment.getDefaultScreenDevice();

      

    GraphicsConfiguration config = device.getDefaultConfiguration();

    

    // Create an image that does not support transparency (Opaque)

    bufimage = config.createCompatibleImage(width, height, 

      Transparency.OPAQUE);



    //OR

    // Create an image that supports transparent pixels

    bufimage = config.createCompatibleImage(width, height, 

      Transparency.BITMASK);



    //OR

    // Create an image that supports arbitrary 

    // levels of transparency (Translucent)

    bufimage = config.createCompatibleImage(width, height, 

      Transparency.TRANSLUCENT);



    // No.4 How to create a buffered image from 

    // a graphics context which is screen compatible



    public void paint(Graphics g) {

        Graphics2D g2d = (Graphics2D)g;

        int width = 100;

        int height = 100;

    

        // Create an image that does not support 

        // transparency (Opaque)

        BufferedImage bimage = 

          g2d.getDeviceConfiguration().createCompatibleImage(

            width, height, Transparency.OPAQUE);

    

        //OR

        // Create an image that supports transparent pixels

        bimage = g2d.getDeviceConfiguration().createCompatibleImage(

            width, height, Transparency.BITMASK);

    

        //OR

        // Create an image that supports 

        // arbitrary levels of transparency

        bimage = g2d.getDeviceConfiguration().createCompatibleImage(

            width, height, Transparency.TRANSLUCENT);

    }



    // No.5 How to create a buffered image using 

    // Component.createImage(). Further, this is useful 

    // for the developer only if the component is visible 

    // on the screen. Moreover, this method returns 

    // buffered images that do not support transparent pixels.



    BufferedImage bimage = 

  (BufferedImage)component.createImage(width, height);

    if (bimage == null) {

        // The component is not visible on the screen

    }

Наследование что происходит, когда подкласс получает переменные или методы от суперкласса.

Java не поддерживает множественное наследование, кроме как в случае интерфейсов.

Класс Cat в следующем примере подкласса и класса животного является суперкласса. Cat получает едят () метод класса животного даже если мы не будем писать внутри класса.


public class Animal {



    public void eat() {

        System.out.println("Eat for Animal");

    }

}



public class Cat extends Animal {



    public void eat() {

        System.out.println("Eat for Cat");

    }

}

J2SE 5.0 введено много новых возможностей языка. Они включают поддержку для обобщения и улучшенный цикл. Предыдущий Tech Tips охватывает дженерики и улучшенный цикл. Другим важным нововведением в J2SE 5.0 аннотации. Этот совет изучает аннотации, которые встроены в J2SE 5.0.

Во-первых, что такое примечание? Определены как часть имени, аннотации предлагают способ связи метаданных с элементами программы (такие, как классы, интерфейсы и методы). Их можно рассматривать как дополнительный модификатор без изменения генерируемого байт-код для этих элементов.

Концепция внедрения метаданных в исходный код не является новой с J2SE 5.0. Вы можете добавить @ устаревшего тега Javadoc комментариев метода и компилятор воспринимает это как метаданные о методе. Эта способность была в месте с 1,0 освобождении J2SE. Исходная версия платформы уже устаревшими методами, GETENV () Метод системы (хотя это не было в спецификации языка программирования Java до 1,1 добавление). Концепция почти такое же, теперь, по крайней мере, @ частью синтаксиса. Только расположение изменилось — аннотации тэг в источнике, а не комментария. Основным моментом здесь является то, что аннотация систематический способ поддержки декларативной модели программирования.

Это приводит к первой аннотацией, которая поставляется с J2SE 5.0: @ рекомендуется. Обратите внимание на капитал D здесь. Функциональный, @ Запрещены Источник работает так же, как @ устаревшим Javadoc, связанный с классом или методом. По маркировки методами с @ Запрещены тега, вы предупреждений компилятора, чтобы предупредить пользователей при использовании метода или класса.

Следующие основные классе метод с именем deprecatedMethod (), который помечен @ Запрещены аннотации и, @ устаревшим комментарий:


   public class Main {

   

     /**

      @deprecated Out of date. Use System.foobar() instead.

     */ 



     @Deprecated

     public static void deprecatedMethod() {

       System.out.println("Don't call me");

     }

   }

Вы составить класс с аннотациями, так же, как вы делаете для одного без аннотации:

> javac Main.java

Как и ожидалось, это производит Main.class.

Если вы используете устаревшие методы, производит компиляцию времени предупреждение — так же, как использование устаревшей @ тег в Javadoc. Вот пример:


   public class User {

     public static void main(String args[]) {

       Main.deprecatedMethod();

     }

   }

Обобщение класс:

> javac User.java

и вы увидите следующее предупреждение об использовании устаревшего метода:

Note: User.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

Добавление-Xlint к составлению линия показывает, что конкретно является неправильным:

> javac -Xlint:deprecation User.java
User.java:3: warning: [deprecation] deprecatedMethod() in
Main has been deprecated
Main.deprecatedMethod();
^
1 warning

Переход от устаревшей @ комментарий к @ Запрещены аннотации не вносит ничего существенно нового в систему. Она лишь слегка изменяет способ делать то же самое. Две другие новые аннотации доступны на платформе J2SE 5.0, @ и @ Override SuppressWarnings, делать новые функциональные возможности платформы.

Аннотации @ Override может быть использован метод деклараций. Как следует из названия, вы используете @ Override аннотации к флагом метода, который должен переопределить метод суперкласса. Почему это? Чтобы найти ошибку раньше. Сколько раз вы хотели, чтобы переопределить метод, но либо ошибки название метода, указаны неправильные аргументы, или же другого типа взамен? Иными словами, как часто вы определили новый метод, когда то, что вы действительно хотели сделать, это переопределить существующую? С помощью @ Override, вы обнаружите проблемы в следующий класс скорее рано, чем поздно:


   public class Overrode {

     @Override

     public int hashcode() {

       return 0;

     }

     

     @Override

     public boolean equals(Object o) {

       return true;

     

   }

Проблема здесь в том, что имя метода должно быть HashCode, а не хэш. Предположим, что объявление метода похоронен в источник для гораздо большего класса. Без первого @ Override аннотации, сколько времени потребуется, чтобы вы знали, что Ваш хэш () метод (с верблюжьей случае для работы с орфографическими, не все в нижнем регистре) не вызывается, и вы получаете по умолчанию поведение родительского объекта класс? Благодаря аннотации @ Override, составление класс производит ошибка компиляции, предупреждая вас к этой проблеме:

> javac Overrode.java
Overrode.java:2: method does not override a method from its
superclass
@Override
^
1 error

Чем раньше вы можете обнаружить ошибки такого рода, стоимость коррекции становится значительно сокращены. Обратите внимание, что хэш () метод никогда не должен вернуться постоянно. Для более полного описания надлежащее использование хэш () и составляет (), см. пункт 8 в книгу Эффективное программирование на языке Java руководством Джошуа Блоха.

Окончательный трех новых аннотаций в J2SE 5.0, @ SuppressWarnings, является наиболее интересным. Она сообщает компилятору не предупредить вас о том, чего он обычно предупреждает Вас о. Предупреждение относятся к категории, так что вы должны сказать аннотации, какие типы предупреждений подавить. Javac компилятор определяет семь вариантов подавить: все, неодобрение, не остановить, проваливаемся, пути, последовательно и окончательно. (Спецификации языка определяет только два таких типа: неодобрение и бесконтрольно.)

Чтобы продемонстрировать, давайте посмотрим на пресечение проваливаемся вариант. Давайте начнем со следующего класса. Обратите внимание, что класс отсутствует перерыв заявлении за каждый случай переключатель заявление:


   public class Fall {

     public static void main(String args[]) {

       int i = args.length;

       switch (i) {

         case 0:  System.out.println("0");

         case 1:  System.out.println("1");

         case 2:  System.out.println("2");

         case 3:  System.out.println("3");

         default: System.out.println("Default");



       }

     }

   

Обобщение класс с Javac. Вы увидите, что оно просто создает файлы. Файле класса, и не проявляет никаких предупреждений:

javac Fall.java

Если вы хотите, чтобы компилятор предупредит вас о переключении заявлений, которые попадают через (то есть одно или несколько заявлений перерыва отсутствует), вам компилировать с-Xlint: проваливаемся вариант:

javac -Xlint:fallthrough Fall.java

Это дает следующее предупреждение:

Fall.java:6: warning: [fallthrough] possible fall-through
into case
case 1: System.out.println("1");
^
Fall.java:7: warning: [fallthrough] possible fall-through
into case
case 2: System.out.println("2");
^
Fall.java:8: warning: [fallthrough] possible fall-through
into case
case 3: System.out.println("3");
^
Fall.java:9: warning: [fallthrough] possible fall-through
into case
default : System.out.println("Default");
^
4 warnings

Но что если вы хотите игнорировать тот факт, что переключатель заявлении отсутствует перерыв заявлением в каждом конкретном случае? Вот где @ SuppressWarnings аннотацию вступает в игру. Если добавить следующие строки перед основными () Метод декларации:

@SuppressWarnings("fallthrough")

Компиляция класс-Xlint: проваливаемся вариант:

javac -Xlint:fallthrough Fall.java

создадим. классе файла и отображения никаких предупреждений.

@ SuppressWarnings аннотации могут быть также использованы для подавления других предупреждений таких как те, которые будут отображаться, если вы использовали коллекцию без указания типа данных коллекции элементов. Не используйте аннотацию @ SuppressWarnings просто избегать составления времени предупреждения. Используйте его, где отмеченное предупреждение неизбежно, например, при использовании библиотеки, которая строится не с дженериков в виду.

Это действительно об этом встроенный в аннотации. Однако одна вещь дополнительные сведения, аннотации (с любым аргументам) обычно указаны на линии сами по себе.

Существует гораздо больше, что можно сделать, когда вы определите свой собственный аннотации, а не использовать те, которые уже определены в J2SE 5.0. Дополнительную информацию об определении аннотации см.

Copyright (C) 2004-2005 Sun Microsystems, Inc
Все права защищены.

Оба они хороши. Это зависит от задач и вы.

DatagramSocket предназначен для UDP и TCP для ServerSocket. TCP более надежны в плане, что оно обеспечивает доставку, UDP нет. Но UDP пакеты будут гораздо меньше и не такой большой, как заголовки пакета TCP есть.

Если она меньше, то есть больше вероятности, что он приходит быстрее. UDP используется в основном в районах, где вы не видите о ретрансляции. Вы просто не нужно это, потому что информация устарела. Звука, например.

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

Именно от вас принять решение. Если вы не видите, что можете потерять кусочек данных — использование UDP. В противном случае используйте TCP.



java.awt



import java.awt.Color;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Paint;

import java.awt.PaintContext;

import java.awt.Rectangle;

import java.awt.RenderingHints;

import java.awt.geom.AffineTransform;

import java.awt.geom.Point2D;

import java.awt.geom.Rectangle2D;

import java.awt.geom.RoundRectangle2D;

import java.awt.image.ColorModel;

import java.awt.image.Raster;

import java.awt.image.WritableRaster;



import javax.swing.JFrame;

import javax.swing.JPanel;



public class RoundGradientPaintFill extends JPanel{

  public void paint(Graphics g) {

    Graphics2D g2 = (Graphics2Dg;

    RoundRectangle2D r = new RoundRectangle2D.Float(5515015025,

        25);

    RoundGradientPaint rgp = new RoundGradientPaint(7575, Color.magenta,

        new Point2D.Double(085), Color.blue);

    g2.setPaint(rgp);

    g2.fill(r);

  }

  public static void main(String[] args) {

    JFrame f = new JFrame();

    f.getContentPane().add(new RoundGradientPaintFill());

    f.setSize(200200);

    f.show();

  }





  class RoundGradientPaint implements Paint {

    protected Point2D point;



    protected Point2D mRadius;



    protected Color mPointColor, mBackgroundColor;



    public RoundGradientPaint(double x, double y, Color pointColor,

        Point2D radius, Color backgroundColor) {

      if (radius.distance(00<= 0)

        throw new IllegalArgumentException("Radius must be greater than 0.");

      point = new Point2D.Double(x, y);  mPointColor = pointColor;

      mRadius = radius;

      mBackgroundColor = backgroundColor;

    }



    public PaintContext createContext(ColorModel cm, Rectangle deviceBounds,

        Rectangle2D userBounds, AffineTransform xform, RenderingHints hints) {

      Point2D transformedPoint = xform.transform(point, null);

      Point2D transformedRadius = xform.deltaTransform(mRadius, null);

      return new RoundGradientContext(transformedPoint, mPointColor,

          transformedRadius, mBackgroundColor);

    }



    public int getTransparency() {

      int a1 = mPointColor.getAlpha();

      int a2 = mBackgroundColor.getAlpha();

      return (((a1 & a2== 0xff? OPAQUE : TRANSLUCENT);

    }

  }

  public class RoundGradientContext implements PaintContext {

    protected Point2D mPoint;



    protected Point2D mRadius;



    protected Color color1, color2;



    public RoundGradientContext(Point2D p, Color c1, Point2D r, Color c2) {

      mPoint = p;

      color1 = c1;

      mRadius = r;

      color2 = c2;

    }



    public void dispose() {

    }



    public ColorModel getColorModel() {

      return ColorModel.getRGBdefault();

    }



    public Raster getRaster(int x, int y, int w, int h) {

      WritableRaster raster = getColorModel().createCompatibleWritableRaster(

          w, h);



      int[] data = new int[w * h * 4];

      for (int j = 0; j < h; j++) {

        for (int i = 0; i < w; i++) {

          double distance = mPoint.distance(x + i, y + j);

          double radius = mRadius.distance(00);

          double ratio = distance / radius;

          if (ratio > 1.0)

            ratio = 1.0;



          int base = (j * w + i4;

          data[base + 0(int) (color1.getRed() + ratio

              (color2.getRed() - color1.getRed()));

          data[base + 1(int) (color1.getGreen() + ratio

              (color2.getGreen() - color1.getGreen()));

          data[base + 2(int) (color1.getBlue() + ratio

              (color2.getBlue() - color1.getBlue()));

          data[base + 3(int) (color1.getAlpha() + ratio

              (color2.getAlpha() - color1.getAlpha()));

        }

      }

      raster.setPixels(00, w, h, data);



      return raster;

    }

  }

}

Этот совет Java иллюстрирует метод планирования таймер для задач для запуска в определенное время. Разработчик может использовать этот код, если есть необходимость выполнить или повторить задачу в заявку на предопределенный отрезок времени.


    int interval = 10000// 10 sec

    Date timeToRun = new Date(System.currentTimeMillis() + interval);

    Timer timer = new Timer();

    

    timer.schedule(new TimerTask() {

            public void run() {

                // Task here ...

            }

        }, timeToRun);

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


    package com.library;

    

    class Books{



        public boolean myMethod(int p1, Object p2) {

            // Log object entry

            Logger logger = Logger.getLogger("com.library.Books");

            if (logger.isLoggable(Level.FINER)) {

                logger.entering(this.getClass().getName()"Method",

                                new Object[]{new Integer(p1), p2});

            }

    

            // Method body

    

            // Log exiting

            boolean result = true;



            if (logger.isLoggable(Level.FINER)) {

                logger.exiting(this.getClass().getName()"Method"new Boolean(result));

    

                //If the method does not return a value

                logger.exiting(this.getClass().getName()"Method");

            }



            return result;

         }

    }

Ниже приведен пример выходных данных с использованием простого форматирования и следующим телефонам:


    new com.library.Books().Method(123"hello");

    

    Jan 102002 7:59:48 PM com.library.Books Method

    FINER: ENTRY 123 hello

    Jan 102002 7:59:49 PM com.library.Books Method

    FINER: RETURN true

    Jan 102002 7:59:49 PM com.library.Books Method

    FINER: RETURN

Этот совет Java Swing иллюстрирует метод обнаружения перетащить начало жест в вашем приложении. Подсказка показывает простое испытание DragGesture классы ли можно признать простым движением сопротивления. Разработчики могут использовать этот жест, чтобы выполнять различные функции.



javax.swing



import java.awt.*;

import java.awt.dnd.*;

import java.awt.datatransfer.*;

import java.awt.event.*;

import java.io.*;

import java.util.*;

import javax.swing.*;



public class GestureTest extends JFrame implements DragGestureListener {



  DragSource ds;

  JList jl;

  String[] items = {"Java""C""C++""Lisp""Perl""Python"};



  public GestureTest() {

    super("Gesture Test");

    setSize(200,150);

    addWindowListener(new WindowAdapter() {

      public void windowClosing(WindowEvent we) {

        System.exit(0);

      }

    });

    jl = new JList(items);

    jl.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

    getContentPane().add(new JScrollPane(jl), BorderLayout.CENTER);



    ds = new DragSource();

    DragGestureRecognizer dgr = ds.createDefaultDragGestureRecognizer(

        jl, DnDConstants.ACTION_COPY, this);

    setVisible(true);

  }



  public void dragGestureRecognized(DragGestureEvent dge) {

    System.out.println("Drag Gesture Recognized!");

  }



  public static void main(String args[]) {

    new GestureTest();

  }

XML является для хранения структурированных данных. Ниже приведен пример Данные представлены в файле XML.

Каждый документ XML хорошо сформированной должен содержать версию стандарта XML используется и одного элемента документа. Элементом документа является корнем пункта. Все данные должны быть места под элементом документа.

XML замечания должны быть помещены в комментарии блоки следующим образом:

<!-- file: sample.xml -->
<?xml version="1.0"?>
<!-- our XML-document describes a purchase order -->
<purchase-order>
<date>2005-10-31</date>
<number>12345</number>
<purchased-by>
<name>My name</name>
<address>My address</address>
</purchased-by>
<!-- a collection element, contains a set of items -->
<order-items>
<item>
<code>687</code>
<type>CD</type>
<label>Some music</label>
</item>
<item>
<code>129851</code>
<type>DVD</type>
<label>Some video</label>
</item>
</order-items>
</purchase-order>