2012-02-01: Updated to allow for adjustment of spacing between subsequent lines.
Here is a solution for the first two problems adapted from In listings, how to show referenced linenumbers instead of standard ascending linenumbers.
Syntax:
\ShowListingForLineNumber*[percentage]{<line number>}}{<file name>}
where:
* adjust space above current line (optinal)
[percentage] = percentage of \baselineskip to leave above current line (optional, ignored if * is not used). If not specified this is defaults to be 1.0 meaning the entire spacing above is suppressed.
<line number>} is the line number of which the listing is to be printed
<file name> is the file name of the input file

Notes:
- I used the
xparse package to provide the starred version of the command. If you do not want to include an additional package, please see other methods of Defining starred versions of commands
Code:
\documentclass{article}
\usepackage{filecontents}
\usepackage{xcolor}
\usepackage{xparse}% to define star variant of macro
\usepackage{listings}
\begin{filecontents*}{foo.java}
public int nextInt(int n) {
if (n<=0)
throw new IllegalArgumentException("n must be positive");
if ((n & -n) == n) // i.e., n is a power of 2
return (int)((n * (long)next(31)) >> 31);
int bits, val;
do {
bits = next(31);
val = bits % n;
} while(bits - val + (n-1) < 0);
return val;
}
\end{filecontents*}
\lstdefinestyle{MyListStyle} {
numbers=left,
language=Java,
backgroundcolor={\color{yellow}},
breaklines=true
}
\begin{document}
\noindent
Showing line range 3-5:
\lstinputlisting[
style=MyListStyle,
linerange={3-5},
firstnumber=3,
]{foo.java}
\bigskip\noindent
Showing lines 1,3,7,12 (note that Line 7 is blank) with starred version between lines 1 and 3 to supress the space and the space before line 12 set to 50\% of the \verb|\baselineskip|:
\NewDocumentCommand{\ShowListingForLineNumber}{s O{1.0} m m}{
\IfBooleanTF{#1}{\vspace{-#2\baselineskip}}{}
\lstinputlisting[
style=MyListStyle,
linerange={#3-#3},
firstnumber=#3,
]{#4}
}%
\ShowListingForLineNumber{1}{foo.java}
\ShowListingForLineNumber*{3}{foo.java}% supress space before
\ShowListingForLineNumber*[0.5]{7}{foo.java}% supress 50% of the space before
\ShowListingForLineNumber*{12}{foo.java}
\end{document}