PDA

Просмотр полной версии : Java


OneHalf
04.10.2010, 09:21
http://upload.wikimedia.org/wikipedia/ru/thumb/8/88/Java_logo.png/100px-Java_logo.png
Java (должно произносится Джава, но используется и Ява) — объектно-ориентированный язык программирования. Разработан в компании Sun Microsystems в 1995 году (теперь поддерживается компанией Oracle).

Особенностью этого языка программирования является то, что программа компилируется не в коды процессора, а в специальный байт-код, который потом исполняется виртуальной ява-машиной. За счет этого достигается кросплатформенность: программы написанные на Java запускаются и одинаково работают и в Windows и Linux и MacOS и т.д. без изменений исходного кода.
От аналогичного подхода к компилации в .NET отличается тем, что в Java виртуальная машина выполняет инструкции байт-кода, а в .NET программа "докомпилируется" перед запуском.

Платформа Java подразделяется на три типа:

Java Micro Edition - версия языка для программирования мобильных устройств. За счет независимости программы от платформы, Java охватила огромную долю мобильников, в результате чего программа написанная на JavaME будет работать одинаково на разных мобильниках.
Java Standart Edition - версия для компьютеров.
Java Enterprise Edition - версия для приложений масштаба предприятия. Включает в себя работу с базами данных, web сервисами, прочими клиент-серверными примочками и так далее.


К языку прилагается огромное количество библиотек на все случаи жизни: от 2D и 3D графики, до баз данных и криптографии.

Библиотеки Java:

Swing - стандартная библиотека визуальных элементов (кнопки, чекбоксы и т.д.)
Java2D и Java3D - графические библиотеки. Java2D используется для собдания собственных графических компонентов (особенно если требуется масштабирование, отрисовка текста под наклоном и т.д.) Java3D используется, соответственно при создании трехмерных приложений.
JCE, JAAS, JSSE - библиотеки реализации криптографии, аутентификации и авторизации, поддержки протокола SLL соответственно.
JDBC - работа с базами данных.
JNI - интерфейс взаимодействия с программами, написанными на других языках.
RMI, Jini - вызов удаленных методов (т.е. запуск функций на других компьютерах сети)
JXTA - создание peer-2-peer приложений
И еще туева хуча плюшек для сетевого взаимодействия, сервлетов и прочего. (Список есть тут (http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_Java_API))

Arantar
06.10.2010, 16:52
public class HelloWorld
{
public static void main(String[] args)
{
HelloWorld hw = new HelloWorld();
hw.showString();
}
public void showString()
{
System.out.println("Hello, World!");
}
}
Покажите, пожалуйста, на этом простейшем примере (язык Java), как сделать так, чтобы выводились в результате русские символы. И как вообще сделать так, чтобы потом можно их было спокойно использовать?

OneHalf
06.10.2010, 18:24
А в чем проблема то? В яве все по умолчанию в utf-8 и проблем быть не должно. И как именно ты хочешь "потом их спокойно использовать"?

Arantar
06.10.2010, 20:29
OneHalf, у меня вместо русских букв кракозябра в командной строке получается.

OneHalf
06.10.2010, 21:56
Хе хе, похоже дело в том, что виндовая консоль понимает только кодировку cp866, а ява хочет туда вывести utf.

Можно сделать так:

package javatest;

import java.io.UnsupportedEncodingException;

public class HelloWorld {

public static void main(String[] args) {
HelloWorld hw = new HelloWorld();
hw.showString();
}

public void showString() {
try {
System.out.println(new String( "Привет, мир!".getBytes("Cp866"))); // Перекодировка
}
catch (UnsupportedEncodingException uee) { // Приходится перехватывать это исключение :(
System.out.println("Hello, World!");
}
}
}

(написано по образу и подобию этой статьи: http://citforum.ru/internet/javascript/java_rbint.shtml)

Никогда не запускал раньше программы из консоли, и все результаты всяческих
System.out.println("бла-бла")
видел только внутри NetBeans, где они отображаются правильно.

Arantar
06.10.2010, 22:05
Никогда не запускал раньше программы из консоли
Сам бы рад, но обстоятельства. И с почином, кстате.


Что-то не выходит, выдаёт следующее, будем думать...
http://s48.radikal.ru/i121/1010/f1/571fe9b11895.jpg (http://www.radikal.ru)

OneHalf
07.10.2010, 18:22
Возможно нужно убрать или переименовать пакет в строке

"package javatest;"

(Это у меня так пакет назывался.)

Arantar
12.10.2010, 23:15
Посоветуйте хороший учебник по Java, пожалуйста.

OneHalf
13.10.2010, 00:52
Во всех учебниках одно и тоже пишут. Лично я всегда придерживаюсь такой концепции изучения языков:
1. Накачать кучу учебников
2. Изучить самый тонкий
3. Начать писать какую-нибудь большую программу (когда я изучал Java, я писал прогу по расчету шума от вентиляции (на работе акустикой занимаюсь)). Тут главное масштабность и разнообразие необходимых методов программирования, а не сама программа.
4. Успеть понять, что нифига в языке не понятно.
5. Писать программу как можешь, постоянно заглядывая в самый толстый учебник и гугл
6. Периодически просматривать написанный код и, в случае необходимости, переписывать с учетом приобретенных знаний
7. Можно считать себя знатоком языка, если переписал свою программу почти целиком пару раз :)

Последнее утверждение эмпирическое, но примерно так у меня было со всеми языками:

На Бейсике я писал ханойские башни в графике.
На Паскале - программу тестирования (даже заработал с ней первое место на конкурсе ДЮЦ'а своего города)
На ассемблере я писал вирусы под ДОС. Очень увлекательное, кстати, занятие, кубики рубика нервно курят в сторонке.
То как я сокращал размер вируса с трех килобайт до 866 байт останется в моей памяти как самое яркое воспоминание о программировании школьных лет. (Еще бы, несколько месяцев на это потратил)
На PHP+MySQL+AJAX+HTML+CSS - совсем недавно пытался написать сайт университетской группы с кучей фишек. (Сайт забросил, ибо PHP и Ко выучил, а дальше допиливать свой движок не стал, ибо кому надо, заюзают какую-нибудь CMS, а я больше не учусь)
На яве писал прогу по распространению шума по вентиляции
На С++ - программу микроконтроллера для диплома (аж для неконтактного взрывателя торпеды)
На MatLab программа расчета отраженных электромагнитных сигналов от циллиндрических/эллипсоидальных объектов в морской воде. (Тоже для диплома)


Почти везде назревала необходимость переписать программу, т.к. по началу она писалась на основе опыта в других языках, а текущий язык предоставлял какие-либо дополнительные возможности для упрощения кода.

Некоторые языки воспринимаются легко и без таких методов. Например, С# создавался почти как клон явы, и отличается совсем чуть-чуть. (Зная только C# или яву, можно легко читать листинги другого языка)

В общем чтобы научиться программировать, надо начать это делать. Учебник по сути не важен, важно чтобы была практика и возможность найти решение возникающих проблем по мере накопления этой практики.

lorin
13.10.2010, 19:05
Естъ небольшая проблемка.
Нужно соединитъ два массива вместе используя System.arraycopy()
т.е. приципить один к концу другого.
На сколько мне известно, изменять размер существующего массива нельзя, т.е. следующий код не пройдет:
public class Auf54 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] iErsteStappel = {6,7};
int[] iZweiteStappel = {1,2,3,4,5};
System.arraycopy(iErsteStappel, 0, iZweiteStappel, iZweiteStappel.length, iErsteStappel.length); //funkt nicht wegen den Array-Groessen.
for (int i=0; i<iZweiteStappel.length; i++ )
{
System.out.println(iZweiteStappel[i]);
}

}

можно ли как-то обойти это ограничение, кроме как создать третий массив с размерностью равной сумме размерностей первых двух и скопироватъ сначала первый, а затем второй?
т.е. кроме как так:
public class Auf54 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] iErsteStappel = {6,7};
int[] iZweiteStappel = {1,2,3,4,5};
int iALaenge=0;
iALaenge=iErsteStappel.length+iZweiteStappel.lengt h;
int[] iZusammen = new int[iALaenge];
System.arraycopy(iZweiteStappel, 0, iZusammen, 0, iZweiteStappel.length);
System.arraycopy(iErsteStappel, 0, iZusammen, iZweiteStappel.length, iErsteStappel.length);


for (int i=0; i<iZusammen.length; i++ )
{
System.out.println(iZusammen[i]);
}

}

}

OneHalf
13.10.2010, 19:51
Нельзя. При создании массива под него выделяется память, размер которой изменить нельзя. Так что если нужны именно массивы, то нужно создавать новый с нужным размером.

Но можно еще использовать коллекции. Это классы, которые могут хранить переменное количество элементов, запрашивая, если нужно, у ОС новые куски памяти при изменении набора элементов.
В таком случае можно будет даже использовать цикл типа:

for(Integet n : Коллекция<с типом Integer>) {
...
}

lorin
13.10.2010, 22:17
OneHalf, да, я в курсе, потому и удивился заданию. Буквально:
имеется два массива array, нужно к первому прицепить второй, а ко второму первый и все это при помощи метода System.arraycopy()

При этом логически я допускаю что во-первых содержимое массивов должно оставаться без изменений, т.е. если в массиве X элементов, то все они должны остаться, даже если это нули. Ну а во-вторых если я создам третий массив, то это уже формально будет не первый.
Единственное можно после создания третьего массива, содержащего объедененные элементы первого и второго, поменять указатели последних на третий. Но формально это тоже не является объединением массивов.

Вобщем я считаю, что задание сформулированно некорректно.
Следующим заданием по скрипту бы было увеличение заданного array of integer на 10 integer элементов при помощи того же метода. И тут мне тоже ничего иного в голову не идет, кроме как повторения предыдущей песни, но с пустым вторым массивом на 10 элементов.

Задания начального уровня, подразумевается, что обучающийся только познакомился с имплементацией массивов и метода System.arraycopy().

Arantar
20.10.2010, 21:33
Не получается создать программку, которая бы при вводе месяца, выводила бы сезон года.
class VESNA{
public static void main
(String[] args){
String s1;
s1=args[0];
if ((s1=="december")|| (s1=="january")||(s1=="february")) s1="winter";
if ((s1=="march")||(s1=="april")||(s1=="may")) s1="spring";
if ((s1=="june")||(s1=="july")||(s1=="auguest")) s1="summer";
if ((s1=="september")||(s1=="october")||(s1=="november")) s1="autumn";
System.out.println(s1);
}}

OneHalf
20.10.2010, 23:27
Сравнивать строки надо так:

if (s1.equals("december"))
doSomeThing();

Иначе программа сравнивает адреса строк в памяти, а не их содержимое

lorin
24.10.2010, 14:14
Arantar, плюс, хоть это и очевидно и думаю не имеет отношения к проблеме, нет ввода данных для s1

xine
24.10.2010, 15:09
нет ввода данных для s1
Есть:
s1=args[0];

lorin
24.10.2010, 17:02
Есть:
Да, точно. Пропустил шапку.

OneHalf
13.11.2010, 16:43
Умеет тут кто-нибудь юзать JasperReports и iReport ? Мне бы какую-нибудь краткую справку почитать, а то никак не могу понять как это должно работать.

Arantar
24.11.2010, 17:27
Факториал на Java и на VBA как представить?

OneHalf
02.12.2010, 07:51
Библиотеку JGraphX тоже никто не использовал?

Arantar
07.01.2011, 17:01
Собственно задание:
Дан упорядоченный по неубыванию массив A из N чисел и число X. Получить массив B, вставив X в A так, чтобы B был упорядочен по неубыванию.

Nickolyan
06.06.2011, 12:47
Подскажите хорошую книжку для только начинающих изучать джаву.

CrazyPunk
12.07.2011, 12:48
Nickolyan, Кей Хорстманн. "Java2. Основы" Вроде неплохая книжка. Всё довольно подробно расписано.

M1ghtMortal
12.08.2011, 17:57
Подскажите как сделать окно выбора папки. Использую Swing. Нашел только вызов окна выбора файла.

lorin
14.08.2011, 04:11
M1ghtMortal, а для чего тебе нужно выбрать папку? Для указания места сохранения?

M1ghtMortal
14.08.2011, 20:15
lorin, нет, мне нужно будет в этой папке найти файлы(дальше уже с ними работать, но это уже другой разговор). Сразу скажу что нужно будет искать на любой глубине, но поиск я надеюсь сам напишу.

Hast
14.08.2011, 22:17
M1ghtMortal, эмм... Я не понял.

Нашел только вызов окна выбора файла.
мне нужно будет в этой папке найти файлы
Ват?

lorin
17.08.2011, 15:49
M1ghtMortal, то есть тебе нужен аналог ls на java?
Смотри в сторону класса java.io.File (http://download.oracle.com/javase/1.4.2/docs/api/java/io/File.html)
и его методов
isDirectory()
listFiles()

Примерчик:
import java.io.File;

public class FileTest {

public static void main(String[] args) {


File[] rootList = File.listRoots(); //получаем список корневых каталогов. Альтернативно можно самому задать объект типа File с путем к нужной папке в конструкторе

for (File root : rootList) { //для каждого элемента в rootList
File[] fList = root.listFiles(); //ищем все файлы/папки что есть(возможно не проверяются скрытые, хз)

for (File fileIterator : fList) { //печатаем в консоль путь к найденым файлам/папкам
System.out.println(fileIterator.getAbsolutePath()) ;
}
}

}

}
Чтобы работать с найденными файлами(например считать их построчно) используй scanner

Knez
20.11.2011, 07:44
дайте, плиз, ссылку на настроенный Eclipse.

M1ghtMortal
20.11.2011, 15:43
Knez, А что в настраивать то? Качай с офф. сайте, если что конкретно тебе нужно, то сам настроишь, ведь люди не знают что тебе нужно.

Knez
20.11.2011, 19:43
M1ghtMortal, не знаю, что качать....скачал Eclipse IDE for Java Developers верно? а он не запускается(

M1ghtMortal
20.11.2011, 19:46
Knez, Ошибку какую-нибудь выдает? С офф. сайта качаешь? Какая ОС?

Knez
21.11.2011, 05:18
M1ghtMortal, да с оф.сайта. ОС - 7 64 битная. Ошибка - JRE or JRD must be available in order to run eclipse. я так понимаю надо ещё что-то скачать, но я ж вроде уже скачал IDE специально для Java..

CrazyPunk
21.11.2011, 05:40
Knez, до кучи скачай и поставь JDK, JRE, JRD

M1ghtMortal
21.11.2011, 10:27
CrazyPunk, Что за JRD? Я без него нормально Eclipse на винде запускал.

lorin
27.11.2011, 21:49
Knez, если знаком с английским - тут решение:
http://stackoverflow.com/questions/2030434/eclipse-no-java-jre-jdk-no-virtual-machine

Mad-21
02.05.2012, 23:31
Задали написать курсовую по Modernizr. Есть какие-нибудь русскоязычные источники по этому поводу? Заранее спасибо.

CMETAHA
02.05.2012, 23:53
Mad-21, Это же не Java, а JavaScript вроде?

На офф сайте всё вроде достаточно подробно расписано.

nikitakress
12.11.2012, 22:06
Можете подсказать, как сделать так, чтобы значение у переменной сохранялось после выхода из цикла/if(else) и тп. А то создаю локальную переменную в методе класса, и не могу понять, почему, если по идее она должна быть инициализирована в, например цикле, то после этого цикла мне выдаётся ошибка о том, что локальная переменная не объявлена? Можно ли сделать как в С++? Там я прекрасно помню, массив можно было задать одним циклом, а считать другим.

Nikolay
13.12.2015, 20:40
Ребят. Вопрос. Windows 10 не могу установить Java SE D Kit 8u65(качаю с сайта oracle версию для x64 систем windows). "Чтобы найти версию для вашего компьютера, обратитесь к издателю приложения". Невозможно запустить приложение на вашем пк. x64.
Что делать?

pokibor
14.12.2015, 07:37
Вариант 1. Снести к чертям десятку
Вариант 2. Поставить виртуальную машину и установить на неё. У того же Оракла есть Virtual Box (причём на сайте можно скачать уже готовые виртуальные машины), хотя тоже не факт, что заработает.
Вариант 3. Запустить в режиме совместимости, если он остался в десятке. Возможно, проблема просто в идентификации ОС, и это поможет.
Вариант 4. Попробовать поставить 32-х битную версию.
Первый вариант самый правильный и надёжный. Подробнее не подскажу, т.к. десятку не ставил по очевидным причинам.