I'm starting to plan out my next game, it's slightly bigger than my last and I have some questions about things that I was confused about in my previous project. Because my last project wasn't as big I managed to work around the fact that I didn't know what to do at all, but I want to do it right this time and learn as much as I can, so be informative as you can with your responses

My problem is storing game data, I'm not talking about saving game state or maps or anything(I usually save those as text, eg. using one line for each tile on a map, with tile attributes seperated by a delimiter, is that a good approach? I suppose I'd encrypt it or something too if it was a serious game) but about things like different enemy or projectile types. Usually when I write a game I'll have for instance an enemy class and a projectile class, and each different type of projectile/enemy will be represented by the same class but with different default values. Next time I'm also planning on having some types represented by a subclass of Enemy or Projectile next time so I can write unique code for the different kinds of things(eg override the Enemy classes attack() function to do some unique attack logic). I'd also like to ask here if that is a good way of handling these things.

Anyway, on to the title question, I'm stumped trying to figure out a good way to store information about all my different enemy/projectile types. If I use the implementation I described above for their classes, then I just need to save all the values for the different arguments I need to pass to the classes constructor(usually things like maxHealth, spriteRef(I use string refs for graphics, which are all stored in a hashmap mapping the string to the image used for drawing, good/bad?), etc).

One method I'm considering is having an XML file for all enemies and having each individual enemy as an element, or maybe having a unique XML file for each enemy. Then finding an appropriate way to load/unload them into memory, probably by storing the enemies used in each level in its level file then loading them into memory as part of the level loading process, idk what I'd do for something like projectiles though as any of them could be used in any level in some of my games, I suppose I could load them all into memory for this project because it's a desktop game, but what about future games on android, won't that be a bit to much for a phones limited memory? How do you handle storing and loading this type of unchanging information for your games?

Sorry for all the subquestions and the general confusion of my post, it reflects my confusion on the topic. Obviously I'm a beginner and I'm frustrated by knowing there is probably a nice, clean, and robust way of doing these things but being unable to figure it out. I think I'm gonna start reading other peoples code to get an idea of how they handle things in general, where is a good place to do this? are there any sites where I can find source code to read along with code reviews so I can get other peoples critiques of the code? I really appreciate it if you took the time to read through this mess of a post and especially if you post a reply that furthers my understanding

oh and btw the game im planning on making is a space shooter, a much more advanced very distant cousin of asteroids, and it will be written in java

Looks like you have to many subquestions. You need to sort them one by one.

So let's see.

How to store some data?

Where to store data?

Can it be covered with encryption?

What the best format to store some pretty similar chunks?

Does xml enough good to store some data in it?

How many data I want to have?

What level of agile in my data sources I do need?

Do I really have to write it on Java?

Actually you can use litesql for store data. It was ok for store some data in it. There is some important questions such as 7th of the list.For the beginning you can use some simple interface to obtain data. It will give you lot of abstraction when to realize it in the future, when you will have enough knowledge about how to do it in optimized way.