The beach at Cruz Bay [1] is too crowded and built up for swimming, although it is nice to look at. The nearest nice beaches are a one-mile hike from town.
Solomon Beach is a secluded, white-sand beach with good snorkeling; it is known as the unofficial nudist beach on St. John [2] (nude bathing is illegal in the U.S. Virgin Islands).
Honeymoon Beach is a slightly larger, equally charming white-sand beach just beyond Solomon where people tend to keep their clothes on. The rocky headland between the two is good for snorkeling. Since you can’t drive to these beaches, you will almost always have them to yourself, unless you have the bad luck of choosing to visit at the same time day-sail operators drop in with a boatload of tourists.
To get to Solomon and Honeymoon Beaches take the Lind Bay Trail, which begins behind the national park visitors center in Cruz Bay [1]. It is 0.9 mile to Solomon Beach and 0.1 mile farther to Honeymoon. After your swim, you can make the short walk on to Caneel Bay Resort and catch a taxi back to town, or you can hike back the way you came.
Although the distances are short, don’t underestimate the walk to these beaches, especially on a hot day. Bring lots of water.
Links:
[1] http://www.moon.com/destinations/virgin-islands/st-john/sights/cruz-bay
[2] http://www.moon.com/destinations/virgin-islands/st-john