Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Маленький тест, :) 
:(
    Опции темы
Domestic Cat
Дата 22.6.2004, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



biggrin.gif biggrin.gif biggrin.gif

сформулирую вопрос еше раз:

что нужно добавить к классу
Код

public class Test
{
   public static void main(String [] args)
   {
       while (true);
   }
}

чтобы при одновременном нажатии 2х клавиш программа напечатала "Hello World"

1. Изменять main нельзя
2. Пользоваться GUI / Listenerami и Stream'ами (кроме System.out.println) нельзя.
3. Можно добавить 1 класс

smile.gif


--------------------

PM   Вверх
ElectricalStorm
Дата 22.6.2004, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

Репутация: 5
Всего: 9



Можно сделать класс потомок от Thread и в статике как показанно выше запустить поток...
если так нельзя то я предпологаю что эти магитческие две кнопки Ctrl + D или Z или С
тоесть например ситается ввод все в том же статике через System.in а по завершению ввода печатаем Hello и выходим

наверно что типа такого ... smile.gif




--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
LSD
Дата 22.6.2004, 19:59 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



Код

public class Test
{
 static
 {
   Runtime.getRuntime().addShutdownHook(new Thread(new MyHook()));
 }
 
 public static void main(String[] args)
 {
   while (true);
 }
 
 private static class MyHook implements Runnable
 {
   public void run()
   {
     System.out.println("Hello World!");
   }
 }
}

Отзывается на Ctrl+Break biggrin.gif biggrin.gif biggrin.gif

Это сообщение отредактировал(а) LSD - 22.6.2004, 19:59


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Domestic Cat
Дата 22.6.2004, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Браво LSD adv/super.gif thumbs-up.gif

Было бы у меня 100 постов добавил бы репутацию smile.gif smile.gif biggrin.gif


--------------------

PM   Вверх
LSD
Дата 22.6.2004, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



Переживу smile.gif , а еще вопросы есть? Мне понравилость!
А вот мой: можно ли запретить наследование не объявляя класс final?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
DarkDS
Дата 22.6.2004, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: 11
Всего: 16



Цитата(LSD @ 22.6.2004, 20:41)
Переживу smile.gif , а еще вопросы есть? Мне понравилость!
А вот мой: можно ли запретить наследование не объявляя класс final?

Объявить все конструкторы приватными smile.gif

Это сообщение отредактировал(а) DarkDS - 22.6.2004, 20:59
PM MAIL   Вверх
Domestic Cat
Дата 22.6.2004, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Код

class CannotBeInheritedFrom
{
   public CannotBeInheritedFrom() throws Exception
   {
       throw new Exception("You cannot inherit from this class");
   }
   private CannotBeInheritedFrom(int i)
   {
   
   }
   static final CannotBeInheritedFrom getInstance()
   {
       CannotBeInheritedFrom instance = new CannotBeInheritedFrom(1);
       return instance;
   }
}


Это сообщение отредактировал(а) Domestic Cat - 22.6.2004, 21:00


--------------------

PM   Вверх
DarkDS
Дата 22.6.2004, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: 11
Всего: 16



Цитата(Domestic @ 22.6.2004, 20:59)
Код

class CannotBeInheritedFrom
{
   public CannotBeInheritedFrom() throws Exception
   {
       throw new Exception("You cannot inherit from this class");
   }
   private CannotBeInheritedFrom(int i)
   {
   
   }
   static final CannotBeInheritedFrom getInstance()
   {
       CannotBeInheritedFrom instance = new CannotBeInheritedFrom(1);
       return instance;
   }
}

так все равно проще:
Код

class CannotBeInheritedFrom
{
   private CannotBeInheritedFrom(){}

   static final CannotBeInheritedFrom getInstance()
   {
       CannotBeInheritedFrom instance = new CannotBeInheritedFrom();
       return instance;
   }
}

PM MAIL   Вверх
Domestic Cat
Дата 22.6.2004, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Согласен smile.gif Запостил первое что на ум пришло.


--------------------

PM   Вверх
Domestic Cat
Дата 22.6.2004, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Ок, вопрос такоу:
Сколько памяти на хипе заuмет Object (то есть полученныж как Object object = new Object()) . Сколко памяти нужно на об#ект если он содержит поле типа byte (boolean, int, long, double, float)?
smile.gif

PS, Naprimer
Код

public class MyObject
{
      public int variable; // byte / boolean/ long / double / float
}


Это сообщение отредактировал(а) Domestic Cat - 23.6.2004, 15:30


--------------------

PM   Вверх
AntonSaburov
Дата 23.6.2004, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Я тут тестик навалял - у меня такие вот числа получились:
Просто Object жрет аж 200 байтов. Хотя я не понял -почему. Надо покопатьс в документации. Или может кто подскажет.

А любое поле (byte, float, double ...) добавляет еще 8 байт.
PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 23.6.2004, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



По идее Object ест только 8 баuт плюс 8 баuт на лyбое поле, хотя если примитив меньше 8 баuт то JVM впихивает 2 примитивa в те же 8 баuт.

smile.gif

Код

class MemoryTest
{    
   public long calculateMemoryUsage(ObjectFactory factory)
   {      
       Object handle = factory.makeObject();      
       long mem0 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();      
       long mem1 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
       handle = null;  
       System.gc(); System.gc(); System.gc(); System.gc();      
       System.gc(); System.gc(); System.gc(); System.gc();      
       System.gc(); System.gc(); System.gc(); System.gc();      
       System.gc(); System.gc(); System.gc(); System.gc();      
       
       mem0 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
       handle = factory.makeObject();
   
       mem1 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();      
       return mem1 - mem0;    
   }    
   
   public void showMemoryUsage(ObjectFactory factory)
   {
           long mem = calculateMemoryUsage(factory);      
           System.out.println( factory.getClass().getName() + " produced "        
                 + factory.makeObject().getClass().getName() +
                 " which took " + mem + " bytes");    
   }
}

interface ObjectFactory
{    
       public Object makeObject();  
}

public class Test
{
   public static void main(String [] args)
   {
       MemoryTest mt = new MemoryTest();
       mt.showMemoryUsage(new MyFactory());
   }
}


nu a MyFactory menjaem kak hotim:

Код

class MyFactory implements ObjectFactory
{    
        private static class MyObject
        {      
                boolean b;    
        }    

       public Object makeObject()
      {      
             return new MyObject();    
      }  
}


Это сообщение отредактировал(а) Domestic Cat - 23.6.2004, 17:40


--------------------

PM   Вверх
LSD
Дата 23.6.2004, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



Цитата(Domestic @ 22.6.2004, 21:40)
Ок, вопрос такоу:
Сколько памяти на хипе заuмет Object (то есть полученныж как Object object = new Object()) . Сколко памяти нужно на об#ект если он содержит поле типа byte (boolean, int, long, double, float)?

1) Это по моему зависит от реализации JVM
2) А как вы выяснили?
3) Domestic Cat у вас случайно не Power Mac G5?

От класса с приватными конструкторами может наследовать внутренний класс. И если он public то от него можно вполне успешно наследовать дальше smile.gif . А как от него наследовать если он не static?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Domestic Cat
Дата 23.6.2004, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



1. Зависит, но вроде на многих дает 8 баит на примитив. Интересно сравнить с M$JVM
2. Выяснили что ? smile.gif
3. 700 MHz PowerPC G4 / 384 MB SDRAM

А вопрос хоpоshии wink.gif с первого захода не взjaл ...

Это сообщение отредактировал(а) Domestic Cat - 23.6.2004, 21:54


--------------------

PM   Вверх
LSD
Дата 23.6.2004, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



Цитата
Выяснили что ?

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

Цитата
700 MHz PowerPC G4 / 384 MB SDRAM

А я надеялся что 64 битная машинка, можно было-бы сравнить разные JDK.

Запретить наследование от класса можно приватными конструкторами, throw Exception, System.exit() и т.д. не запрещает наследовать, но не дает создавать экземпляры объекта при помощи конструктора. При большом желании это можно обойти сериализацией.
Но если все-таки есть внутренний класс, и если он public то от него можно вполне успешно наследовать дальше. А как от него наследовать если он не static?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1667 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.