Maximum Length for a Java Class Name ?

A

Alex Hunsley

MattC said:
> Can anyone tell me the maximum length of a Java class name?

Have you tried the JLS (Java Language Specification), Google, and Google
groups yet?
 
?

=?ISO-8859-1?Q?Arne_Vajh=F8j?=

MattC said:
Can anyone tell me the maximum length of a Java class name?

Public classes needs to be in a file with the same name
as the class, so the file system will probably limit
it to 255 or something like that.

BTW, you other programmers on the team will murder you if
you use classnames longer than about 20 anyway ...

Arne
 
P

Piotr Kobzda

MattC said:
Can anyone tell me the maximum length of a Java class name?

For current JVMs it is a maximum of 65536 characters for fully qualified
class name.

However, not all such long names are allowed. The limit is 65536 bytes
for fully qualified class name encoded using modified UTF-8 as described
in "The class File Format" spec. It comes from 'u2' capacity (16 bits)
-- the type of 'length' from constant pool 'CONSTANT_Utf8_info'
structure used to store class names in class files.


piotr
 
C

Chris Uppal

Piotr said:
For current JVMs it is a maximum of 65536 characters for fully qualified
class name.

Occurs to me that there's a nice little obfuscation technique there -- rename
all classes to so that their names start with, say, about 10 thousand spaces,
and there aren't too mamy bytecode tools that will be usuable with the
resulting classfiles ;-)

-- chris
 
P

Piotr Kobzda

Chris said:
Occurs to me that there's a nice little obfuscation technique there -- rename
all classes to so that their names start with, say, about 10 thousand spaces,
and there aren't too mamy bytecode tools that will be usuable with the
resulting classfiles ;-)

Well, I think the bytecode verifier will prevent against spaces in
names, but with other char, say 'x', or simply with randomly generated
long name, why not?... ;-) Hopeless, it is very easy to rename
classes/methods/fields in class-files, so in a case, when you really
need good obfuscation, let more sophisticated tools do theirs job...
Well, I can't recommend any tool of such type, but I've heard they
exist... :) (In fact, I don't recall any need for such a tool from my
past... Of course, I see reasons for it, but I know also, what such a
tool can, and what it can't do... So I probably will never "destroy" my
classes with it, there are lot of nicer things to do with Java classes
than obfuscating... :) ).


piotr
 
P

Piotr Kobzda

Me:
Well, I think the bytecode verifier will prevent against spaces in
names, but with other char, say 'x', or simply with randomly generated
long name, why not?... ;-)

Checked that, and it appears to me now, that, as Chris suggested, spaces
are also allowed by recent class verifiers (even with -Xfuture option
classes with only spaces in names are accepted).

I tried to find any formal specification on verification which states
that, but I haven't found anything stating it directly, neither in JLS,
nor in JVMS, except a single non-normative fragment from the latter
concerning verifications performed by the verifier:

"• Checking that all field references and method references in the
constant pool have valid names, valid classes, and a valid type descriptor."

It is not about class names, it's on method and field references names
only, and even for them, it is not clear to me what a "valid names"
means here?...

So, it's better to assume, that on JVM level, any class name (excluding
maybe empty, and incorrectly encoded one) is allowed.


P.S.
There is also a mistake in my advice to the OP, the maximum class name
length is 65535 (not 65536) characters, sorry for that.


piotr
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top