She said Britain needed certainty, stability and strong leadership following the EU referendum.
Explaining the decision, Mrs May said: "The country is coming together but Westminster is not."
There will be a Commons vote on the proposed election on Wednesday - Labour have said they will vote with the government.
The prime minister needs Parliament's backing to hold a vote before the next scheduled date of 2020.
Explaining her change of heart on an early election, Mrs May said: "I have concluded the only way to guarantee certainty and security for years ahead is to hold this election."
She accused Britain's other political parties of "game playing", adding that this risks "our ability to make a success of Brexit and it will cause damaging uncertainty and instability to the country".
"So we need a general election and we need one now. We have at this moment a one off chance to get this done.
"I have only recently and reluctantly come to this conclusion. Since I became prime minister I've said there should be no election until 2020, but now I have concluded that the only way to guarantee certainty and security for the years ahead is to hold this election and seek your support for the decisions we must take."
In a statement outside Number 10, Mrs May said Labour had threatened to vote against the final Brexit agreement, the Liberal Democrats had stated they wanted to "grind the business of government to a standstill", the SNP have said they would vote against the legislation that formally repeals Britain's membership of the EU - and "unelected" members of the House of Lords had vowed "to fight us every step of the way".
"If we don't hold a general election now, their political game-playing will continue and the negotiations with the European Union will reach their most difficult stage in the run up to the next general election," she said.
The PM challenged the opposition parties: "This is your moment to show you mean it - to show you're not opposing the government for the sake of it, to show that you do not treat politics as a game.
"Let's tomorrow vote for an election - let's put forward our plans for Brexit and our alternative programmes for government and then let the people decide."
Labour leader Jeremy Corbyn said he welcomed the prime minister's decision, saying it would "give the British people the chance to vote for a government that will put the interests of the majority first."
He said: "Labour will be offering the country an effective alternative to a government that has failed to rebuild the economy, delivered falling living standards and damaging cuts to our schools and NHS.
"In the last couple of weeks, Labour has set out policies that offer a clear and credible choice for the country. We look forward to showing how Labour will stand up for the people of Britain."
Scotland's First Minister Nicola Sturgeon accused the Conservatives of seeing "a chance to move the UK to the right, force through a hard Brexit and impose deeper cuts", adding: "Let's stand up for Scotland".
In his response to Mrs May's announcement, Lib Dem leader Tim Farron tweeted: "This is your chance to change the direction of your country. If you want to avoid a disastrous hard Brexit. If you want to keep Britain in the single market. If you want a Britain that is open, tolerant and united, this is your chance.
"Only the Liberal Democrats can prevent a Conservative majority."