типы классов Java - что они имеют в виду?

Каков Java class ввести используемый для? Я смущен тем, что это означает и как это отличается, чем объявление object тип:

Class className;

Спасибо

5
задан greg 15 February 2010 в 19:26
поделиться

6 ответов

javadoc говорит:

Экземпляры класса Class представляют классы и интерфейсы в работающем приложении Java. Перечисление - это своего рода класс, а аннотация - это своего рода интерфейс. Каждый массив также принадлежит классу, который отражается как объект Class, совместно используемый всеми массивами с одним и тем же типом элемента и количеством измерений. Примитивные типы Java (boolean, byte, char, short, int, long, float и double) и ключевое слово void также представлены как объекты класса.

Класс не имеет открытого конструктора. Вместо этого объекты Class создаются автоматически виртуальной машиной Java при загрузке классов и вызовах метода defineClass в загрузчике классов.

-121--4716361-

Ее можно использовать при проверке типа переменной или при проверке времени выполнения наследования. Он также используется в отражении, для динамической загрузки типов и выполнения методов на них.

-121--4716362-

Существует несколько вариантов использования объекта Class. Например, я хочу создать экземпляр класса на основе имени класса, сохраненного в файле конфигурации.

String className = config.myClass;
Class clazz = Class.forName(className);
Object myClassInstance = clazz.newInstance();
4
ответ дан 13 December 2019 в 05:34
поделиться

Сработает ли: Да.

Соответствует ли он: Нет.

Согласно стандарту C:

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf

Все имена в стандартной библиотеке зарезервированы (включая malloc).

7.1.3 Reserved identifiers
Specifically:  
    <quote>Each macro name in any of the following subclauses</quote>
    <quote>All identifiers with external linkage in any of the
    following subclauses</quote>

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

7.1.3 (note 2)
Specifically:
    <quote>If the program declares or defines an identifier in a context in which
    it is reserved or defines a reserved identifier as a macro name,
    the behavior is undefined.</quote>

Таким образом, по определению определение malloc () является несоответствующим, поскольку является неопределенным поведением (undefined behavior).

-121--4195954-

Я заметил ваш «программно» квалификатор, но на всякий случай, если решение, не имеющее кода, приемлемо для того, что вы делаете...

IExpress может создавать EXE, который выполняет два других EXE. Пакет IExpress можно построить из командной строки.

SED-файл:

[Версия]
Класс = IEXPRESS
SEDVersion = 3
[Опции]
PackagePurpose = InstallApp
SunInstallProgureWindow = 1
HireExtractAnimation = 1
UseLongFileName = 0
StartCompressed = 0
CAB_FixedSize=0
CAB_ResvCodeSigning=0
RebootMode = N
InstallPrompt =% InstallPrompt%
DisplayLicense =% DisplayLicense%
FinishMessage =% FinishMessage%
TargetName =% TargetName%
Имя клиента =% Имя клиента%
AppЗапущено =% AppЗапущено%
PostInstallCmd =% PostInstallCmd%
AdminQuietInstCmd =% AdminQuietInstCmd%
UserQuietInstCmd =% UserQuietInstCmd%
SourceFiles = SourceFiles
[Последовательности]
InstallPrompt =
DisplayLicense =
FinishMessage =
TargetName = C :\combined.exe
FriendiveName = Заголовок примера
AppЗапущено = run.bat
PostInstallCmd =
AdminQuietInstCmd =
UserQuietInstCmd =
FILE0 = «FirstProgram.exe»
FILE1 = «SecondProgram.exe»
FILE2 = «run.bat»
[SourceFiles]
SourceFiles0 = C :\programs\
[SourceFiles0]
% %FILE0 =
% %FILE1 =
% FILE2% =

файл run.bat:

FIRSTP ~ 1 .EXE
SECOND ~ 1 .EXE

При запуске combined.exe выполняется firstProgram.exe. После его завершения будет выполнен файл secondProgram.exe. Если вы хотите, чтобы firstProgram.exe и secondProgram.exe запускались одновременно, это можно сделать с изменением файла BAT.

-121--2471823-

Из книги Мышление на Java :

Объект Class

Чтобы понять, как в Java работает информация о типе выполнения (RTTI), необходимо сначала знать, как информация о типе представлена во время выполнения. Это достигается посредством специальный вид объекта, называемый объектом Class, который содержит информацию о классе. Фактически, объект Class используется для создания всех «обычные» объекты вашего класса.

1
ответ дан 13 December 2019 в 05:34
поделиться

Я еще не уверен, как перевести его на C # (я работаю над ним)

Это версия Haskell

minAndMax :: Ord a => [a] -> (a,a)
minAndMax [x]    = (x,x)
minAndMax (x:xs) = (min a x, max b x)
                   where (a,b) = minAndMax xs

Версия C # должна включать в себя Aggregate некоторые способы (я думаю).

-121--1422460-

На этом сайте показано, как исправить существующую программу цели C: http://www.culater.net/wiki/moin.cgi/CocoaReverseEngineering

А именно, позиционирование:

[[B class] poseAsClass:[A class]];

и swizzling метода:

 /**
 * Renames the selector for a given method.
 * Searches for a method with _oldSelector and reassigned _newSelector to that
 * implementation.
 * @return NO on an error and the methods were not swizzled
 */
BOOL DTRenameSelector(Class _class, SEL _oldSelector, SEL _newSelector)
{
        Method method = nil;

        // First, look for the methods
        method = class_getInstanceMethod(_class, _oldSelector);
        if (method == nil)
                return NO;

        method->method_name = _newSelector;
        return YES;
}

// *** Example ***


// never implemented, just here to silence a compiler warning
@interface WebInternalImage (PHWebInternalImageSwizzle)
- (void) _webkit_scheduleFrame;
@end

@implementation WebInternalImage (PHWebInternalImage)

+ (void) initialize
{
        DTRenameSelector([self class], @selector(scheduleFrame), @selector (_webkit_scheduleFrame));
        DTRenameSelector([self class], @selector(_ph_scheduleFrame), @selector(scheduleFrame));
}

- (void) _ph_scheduleFrame
{
        // do something crazy...
        ...
        // call the "super" method - this method doesn't exist until runtime
        [self _webkit_scheduleFrame];
}

@end

(код скопирован с http://www.culater.net/wiki/moin.cgi/CocoaReverseEngineering )

-121--2901446-

Представляет тип среды выполнения объекта. Фактическое программное использование типа Class часто встречается в отражении и дженериках .

Например, загрузка драйвера JDBC абстрактно с помощью Class # forName () :

String jdbcDriverClassName = getItFromSomeExternalConfigurationFile();
Class.forName(jdbcDriverClassName);

или ввод универсального объекта в предварительно известный тип:

public static <T> T findAttribute(String key, Class<T> type) {
    return type.cast(attributeMap.get(key)); // It's a Map<String, Object>.
}

..., который можно использовать как

SomeType instance = findAttribute("someKey", SomeType.class);

Более подробный пример можно найти здесь в аромате "универсального конвертера объектов

На самом деле, чтение java.lang.Class javadoc, включая все доступные методы, должно дать вам представление о том, для чего он может быть использован.

3
ответ дан 13 December 2019 в 05:34
поделиться

javadoc говорит:

Экземпляры класса Class представляют классы и интерфейсы в запущенном приложении Java. Перечисление - это разновидность класса, а аннотация - это разновидность интерфейса. Каждый массив также принадлежит к классу, который отражается как объект Class, который используется всеми массивами с одним и тем же типом элемента и числом измерений. Примитивные типы Java (boolean, byte, char, short, int, long, float и double) и ключевое слово void также представлены как объекты класса.

Класс не имеет общедоступного конструктора. Вместо этого объекты класса создаются виртуальной машиной Java автоматически по мере загрузки классов и посредством вызовов метода defineClass в загрузчике классов.

1
ответ дан 13 December 2019 в 05:34
поделиться

Вы можете использовать его при проверке типа какой-либо переменной или проверке наследования времени выполнения. Он также используется в отражении, чтобы динамически загружать типы и выполнять для них методы .

1
ответ дан 13 December 2019 в 05:34
поделиться

Класс - это особый тип объекта , то есть Класс является подклассом объекта . Каждый определяемый вами класс имеет свой собственный объект Class . Вы можете получить доступ к нему как MyObject.class или myInstance.getClass () . Другими словами, любой определяемый вами класс имеет атрибут Class , где, как и любой класс, является Object . Согласен, новичка это немного сбивает с толку.

2
ответ дан 13 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: