how can i get sharp edges?
Do not use the Subsurf modifier on everything you make

Subsurf modifier is not a must. It creates a lot of geometry that is not always necessary. Just model the geometry you need. You can have more vertices in the cylindrical part alone. You can use bevel modifiers to make the forms more realistic since objects rarely have completely sharp edges. Two bevels with the first forming loops to fix shading work nice: 



You could also use Y.A.V.N.E. add-on to calculate face area weighted normals to have nice shading with only one bevel. 

You don't need those extra loops to hold this form: